lsmCC 发表于 2023-11-29 21:30:34

bfs问题

#include <bits/stdc++.h>
using namespace std;
// #define x first;
// #define y second;
const int N=1005;
char g;
int st;
typedef pair<int,int> p;

// 人所能到的地方,火焰一定可以到,用的bfs,还需要学一下
int dx[]={0,-1,0,1},dy[]={-1,0,1,0}; //上左下右
int main()
{
    int n,m,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=m;j++)
      {
            cin>>g;   //a=getchar();
      }
      //getchar() 也可以这么去读
    }
   
    for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=m;j++)
      {
             if(g='@')
             {
               x=i,y=j;
             }
      }
      
    }
    int ans=0;
    queue<p> q;
    q.push({x,y});
    st=1;
    while(q.size())
    {
      auto u=q.front();
      q.pop();
      x=u.first,y=u.second;
      for(int i=0;i<4;i++)
      {
            int a=x+dx,b=dy+y;
            if(a<=n&&a>=1&&b<=n&&b>=1&&g!='#'&&!st)
            {
                if(g=='!')ans++;
               st=1;
                q.push({a,b});
               
            }

      }
      
    }
    cout<<ans<<endl;
   
   // 使用bfs,宽搜,感觉一般用队列去写
   
   
}
为什么输出的还是0,不知道哪里错了,不是以及ans++了吗

FishC_GPT 发表于 2023-11-29 21:30:58

这段代码似乎存在一些问题,我认为有几个地方需要进行修改和完善。

首先,在使用`pair`类型时,需要包含`<utility>`头文件。所以请在代码开头添加这行代码:`#include <utility>`

其次,在定义数组`dx`和`dy`时,需要使用大括号`{}`而不是小括号`()`. 所以请将这两行代码修改为:

int dx[] = {0, -1, 0, 1}; // 上左下右
int dy[] = {-1, 0, 1, 0};

接着,在循环输入地图数据时,应该使用一个嵌套循环来逐行读取输入。所以请将下面的代码替换掉:

for (int i=1;i<=n;i++)
{
    for (int j=1;j<=m;j++)
    {
      cin>>g;
      // ...
    }
}

最后,在内层循环中,可以使用`getchar()`来逐个读取字符,但是需要注意读取到的字符可能是回车符,所以在判断字符是否为'#'时,还需要加上一个判断条件。建议将以下这段代码替换为:

for (int i=1;i<=n;i++)
{
    for (int j=1;j<=m;j++)
    {
      g = getchar();
      while (g == '\n') // 跳过回车符
      {
            g = getchar();
      }
      if (g == '#')
      {
            // ...
      }
    }
}

以上是对代码的修改和完善,但是在原代码中,有一些变量没有被使用到,比如`x`和`y`。另外,你的问题应该是一个广度优先搜索(BFS)相关的问题,而目前的代码只是读取了地图数据,并未进行BFS操作。如果你能提供更多关于BFS的细节,我可以帮助你完成相应的代码实现。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

柿子饼同学 发表于 2023-11-30 12:55:00

服了 , 你自己看看 29 行写的啥 ,= 是赋值啊 , == 才是判断相等啊
你这样整个地图全是 @ 了
(调了好久...)
31 行后面找到了就建议写个 break , 这样更快
页: [1]
查看完整版本: bfs问题