鱼C论坛

 找回密码
 立即注册
查看: 642|回复: 2

bfs问题

[复制链接]
发表于 2023-11-29 21:30:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <bits/stdc++.h>
using namespace std;
// #define x first;
// #define y second;
const int N=1005;
char g[N][N];
int st[N][N];
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[i][j];   //a[i][j]=getchar();
        }
        //getchar() 也可以这么去读
    }
   
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
             if(g[i][j]='@')
             {
                 x=i,y=j;
             }
        }
        
    }
    int ans=0;
    queue<p> q;
    q.push({x,y});
    st[x][y]=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[i],b=dy[i]+y;
            if(a<=n&&a>=1&&b<=n&&b>=1&&g[a][b]!='#'&&!st[a][b])
            {
                if(g[a][b]=='!')ans++;
                 st[a][b]=1;
                q.push({a,b});
                
            }

        }
        
    }
    cout<<ans<<endl;
    
   // 使用bfs,宽搜,感觉一般用队列去写
    
    
}
为什么输出的还是0,不知道哪里错了,不是以及ans++了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-30 12:55:00 | 显示全部楼层
服了 , 你自己看看 29 行写的啥 ,  = 是赋值啊 , == 才是判断相等啊
你这样整个地图全是 @ 了
(调了好久...)
31 行后面找到了就建议写个 break , 这样更快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表