bfs 50分求助~~~
查看原帖
bfs 50分求助~~~
591428
tangguochao楼主2021/12/2 20:04
#include <bits/stdc++.h>
using namespace std;
struct coord{
    int x,y;
};
int ans=0;
int a[4][2]={{-1,0},{1,0},{0-1,},{0,1}};
int main()
{
    int n,m;
    cin >> n >> m;

    int s[n+1][m+1];

    for(int i=1;i<=n;i++) {
        for (int j = 1; j <= m; j++) {
            scanf("%1d",&s[i][j]);
        }
    }

    int mm[n+1][m+1];

    memset(mm,-1,sizeof (mm));

    queue<coord>Q;

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            //
            if(mm[i][j]==-1&&s[i][j]>0) {
                ans++;
                Q.push((coord) {i, j});
                mm[i][j]=ans;
            }
            else
                continue;

            while (!Q.empty())
            {
                coord temp=Q.front();
                Q.pop();
                int ux=temp.x;
                int uy=temp.y;

                for(int p=0;p<4;p++)
                {
//                    printf("i=%d\n",i);
                    int x=ux+a[p][0];
                    int y=uy+a[p][1];

                    if(s[x][y]<=0||mm[x][y]!=-1||x<=0||x>n||y<=0||y>m)
                    {
                        continue;
                    }
                    else
                    {
                        mm[x][y]=ans;
                        Q.push((coord){x,y});
                    }

                }
//                printf("ans= %d\n",ans);
            }
        }
    }
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=m;j++)
    {
        printf("%5d ",mm[i][j]);

    }
    puts("");
}
    cout << ans;
}

输入 3 3 110 001 111 输出答案为3

2021/12/2 20:04
加载中...