疾跑冷喵 2022-01-21 12:21 采纳率: 66.7%
浏览 39
已结题

关于BFS搜索的问题

不管输入什么,都是输出NO,也不知道哪里有错误

img

#include<iostream>
#include<string.h>
#include<queue>
using namespace std;

const int maxn=1005;
char mpt[maxn][maxn];//存储地图
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};//代表方向
struct node
{
    int x,y;
};

bool bfs(int sx,int sy,int n,int m,int t)
{
    queue<node>q;
    q.push(node{sx,sy});
    while(t--)
    {
        int len=q.size();
        while(len--)
        {
            auto cur=q.front();//auto为自动判断数据类型
            q.pop();
            for(int i=0;i<4;i++)
            {
                int nx=cur.x+dir[i][0];
                int ny=cur.y+dir[i][1];
                if(nx >= 0 && nx < n && ny >= 0 && ny < m && mpt[nx][ny]=='.')
                {
                    mpt[nx][ny]='#';
                    q.push(node{nx,ny});
                }
            }
        }
        if(q.empty())  break;
    }
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(mpt[i][j]=='.')//找到了毒气还未扩散到的路径
                return true;
    if(t <= 0)  return true;
    else return false;
}

int main()
{
    int n,m,t;
    int sx,sy;
    while(cin>>n>>m>>t)
    {
        memset(mpt,'0',sizeof(mpt));//初始化
        for(int i=0;i<n;i++)  cin>>mpt[i];//输入地图
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(mpt[i][j]=='*');//找到初始位置
                {
                    mpt[i][j]='#';
                    sx=i,sy=j;
                }
            }
        }
      if(bfs(sx,sy,n,m,t))
        {
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    cout<<mpt[i][j];
                }
                cout<<endl;
            }
        }
      else  cout<<"NO"<<endl;
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 真相重于对错 2022-01-21 14:03
    关注
    
     if(mpt[i][j]=='*');//这里多个分号,而且也没看见你判断是否撞墙
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月19日
  • 专家修改了标签 1月21日
  • 创建了问题 1月21日

悬赏问题

  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并