#32494: c++ bfs


j812022@nehs.hc.edu.tw (okhiokhi)

學校 : 國立科學工業園區實驗高級中學
編號 : 194232
來源 : [59.102.241.249]
最後登入時間 :
2022-10-29 16:38:28
b701. 我的領土有多大 | From: [59.102.241.249] | 發表日期 : 2022-10-16 17:06

用bfs

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int x, y, i, j, t, w, n, e, s, a, x2, y2;
    cin>>x>>y;
    int maze[x][y];
    int color[x][y];
    const int dir[4][2]={ {0,-1}, {0,1}, {-1,0}, {1,0} };
    
    for(i=0;i<x;i++){
        for(j=0;j<y;j++){
            cin>>t;
            maze[j][i]=t;
            color[j][i]=0;
        }
    }
    
    queue<array<int, 2>> q;
    for(i=0;i<x;i++){
        for(j=0;j<y;j++){
            if(maze[j][i]==1&&color[j][i]==0){
                
                w=x+1;
                n=y+1;
                e=-1;
                s=-1;
                a=0;
                
                color[j][i] = 1;
                q.push({j, i});
                while (!q.empty()) {
                    auto [xx, yy] = q.front();
                    q.pop();
                    
                    if(xx<w)
                        w=xx;
                    if(yy<n)
                        n=yy;
                    if(xx>e)
                        e=xx;
                    if(yy>s)
                        s=yy;
                    a++;
                    
                    for (i=0;i<4;i++) {
                        x2 = xx +dir[i][0];
                        y2 = yy +dir[i][1];
                        if (color[x2][y2] == 0 && maze[x2][y2] == 1){
                            color[x2][y2] = 1;
                            q.push({x2, y2});
                        }
                    }
                }
                printf("%d %d %d %d %d\n",w,n,e,s,a);
            }
        }
    }
    return 0;
}

 
ZeroJudge Forum