求助,这个BFS哪里出错了,,
查看原帖
求助,这个BFS哪里出错了,,
827136
sanammm楼主2023/1/31 09:28
#include<bits/stdc++.h>
using namespace std;

bool flag[110][110];
int a[110][110],cnt,n,m;
struct coord
{
    int x,y;
};
int walk[4][2]={{0,1},{0,-1},{1,0},{-1,0}};//4个方向
queue<coord> Q;

void bfs(int u,int v)
{
    coord tmp={u,v};
    Q.push(tmp);
    while(!Q.empty())
    {
        coord t=Q.front();
        int ux=t.x,uy=t.y;
        Q.pop();
        for(int k=0;k<4;k++)
        {
            int x=ux+walk[k][0],y=uy+walk[k][1];
            if(x<1||x>n||y<1||y>m||flag[x][y]) continue;//超过边界或者已经到达过,跳过
            flag[x][y]=true;
            coord tmp={x,y};
            Q.push(tmp);
        }
    }
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            scanf("%1d",&a[i][j]);

    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(a[i][j]!=0 && !flag[i][j])//非0并且没有到达过
            {
                bfs(i,j);
                cnt++;
            }
    
    cout<<cnt;

    return 0;
}
2023/1/31 09:28
加载中...