「已注销」 2023-04-04 22:02 采纳率: 90.2%
浏览 27
已结题

C++BFS死循环问题

洛谷原题:https://www.luogu.com.cn/problem/P1443
第一次写BFS,不知道为啥会死循环
我的代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;

int n,m,x,y;
int map[405][405]={-1};
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={1,-1,2,-2,2,-2,1,-1};


struct node{
    int x,y,step;
}now,nextt;

void bfs(int x,int y){
    queue<node>q;
    map[x][y]=0;
    now.x=x;now.y=y;now.step=0;
    q.push(now);//初始化
    while(!q.empty()){
        now=q.front();q.pop();
        for(int i=0;i<8;i++){//遍历X个方向 
            int xx=now.x+dx[i];
            int yy=now.y+dy[i];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&map[xx][yy]==-1) {
                nextt.x=xx;nextt.y=yy;nextt.step=now.step+1;
                map[xx][yy]=nextt.step;
                return;
                q.push(nextt);
            }
        }
    } 
}

int main(){
    cin>>n>>m>>x>>y;
    bfs(x,y);
    for(int i=1;i<=n;i++)for(int j=1;i<=m;j++)printf("%5d",map[i][j]);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • _L.Y.H._ 2023-04-04 22:10
    关注

    你这个代码问题挺大(抱歉
    1.死循环:这是输出的问题
    应该为

      for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                printf("%5d",map[i][j]);
            }
            printf("\n");
        }
    

    2.bfs:
    问题很大。
    建议看一下这篇文章:https://blog.csdn.net/aliyonghang/article/details/128724989?spm=1001.2014.3001.5502

    最后
    给你浅浅修改了一下,可以通过~

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
     
    int n,m,x,y;
    int map[405][405];
    int dx[]={-2,-2,-1,-1,1,1,2,2};
    int dy[]={1,-1,2,-2,2,-2,1,-1};
     
     
    struct node{
        int x,y,step;
    }now,nextt;
     
    void bfs(int x,int y){
        queue<node>q;
        map[x][y]=0;
        now.x=x;now.y=y;now.step=0;
        q.push(now);//初始化
        while(!q.empty())
        {
            for(int i=0;i<8;i++)
            {//遍历X个方向 
                now=q.front();
                int xx=now.x+dx[i];
                int yy=now.y+dy[i];
                if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&map[xx][yy]==-1)
                {
                    nextt.x=xx;
                    nextt.y=yy;
                    nextt.step=now.step+1;
                    map[xx][yy]=nextt.step;
                 //   return;
                    q.push(nextt);
                }
            }
            q.pop();
        } 
    }
     
    int main(){
        cin>>n>>m>>x>>y;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                map[i][j]=-1;
            }
        }
        bfs(x,y);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                printf("%5d",map[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
    

    还不懂的话问我,有时间一定会解答

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 创建了问题 4月4日

悬赏问题

  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?