救命!help me!

P1451 求细胞数量

@[ElonMask](/user/635004) bfs初始要定义vis的,你定义一下试试。
by ikun_god @ 2024-02-02 14:44:17


话说为什么你第14行我本地报错了而且你干嘛遍历临点的临点,当然错的
by ikun_god @ 2024-02-02 14:48:44


建议你把`visit`化成`vis`,或者其他字符
by ikun_god @ 2024-02-02 14:51:11


@[ElonMask](/user/635004) 在吗?
by ikun_god @ 2024-02-02 14:51:56


你这里的第9行`while (q.front() != make_pair(n, m))`应当判断队列是否为空。 还有第24和25行的`q.push({tx, ty});`前边应该在把这里`(x,y)`的vis变为一,放置死循环
by ikun_god @ 2024-02-02 14:56:40


你RE的点应该就是这里(话说这种随便造个数据就能发现问题吧)
by ikun_god @ 2024-02-02 14:58:51


@[ElonMask](/user/635004)
by ikun_god @ 2024-02-02 14:59:06


@[ElonMask](/user/635004) 补:判断队列是否为空的函数为`队列名.empty()`是空才返回1,所以wille中的条件要加!
by ikun_god @ 2024-02-02 15:03:01


@[ElonMask](/user/635004) 话说你这个代码我为什么在本地跑不了。
by ikun_god @ 2024-02-02 15:11:15


AC代码: ``` #include <bits/stdc++.h> using namespace std; char a[4000][4000]; struct node{ int x,y,temp; }; bool vis[4000][4000]; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int n,m; void bfs(int x,int y){ queue<node> q; vis[x][y]=1; q.push({x,y,0}); while (!q.empty()){ x=q.front().x; y=q.front().y; int temp=q.front().temp; q.pop(); for (int i=0;i<4;++i){ int xx=x+dir[i][0]; int yy=y+dir[i][1]; if (xx<1 || xx>n || yy<1 || yy>m){ continue; } if (vis[xx][yy]){ continue; } if (a[xx][yy]=='0'){ continue; } vis[xx][yy]=1; q.push({xx,yy,temp+1}); } } } int main(){ cin>>n>>m; for (int i=1;i<=n;++i){ for (int j=1;j<=m;++j){ cin>>a[i][j]; } } int cnt=0; for (int i=1;i<=n;++i){ for (int j=1;j<=m;++j){ if (vis[i][j]==0 && a[i][j]!='0'){ cnt++; bfs(i,j); } } } cout<<cnt<<endl; return 0; } ```
by ikun_god @ 2024-02-02 15:32:08


| 下一页