#55496: c++ BFS探路


61247091s@gapps.ntnu.edu.tw (wei)


#include <bits/stdc++.h>
using namespace std;

int square,m,n;
int a[1005][1005];
bool history[1005][1005];
struct path{
    int x;
    int y;
};
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};


int bfs(int r,int c){
    queue <path> q;
    q.push({r,c});
    history[r][c]=true;
    int total=0;

    while(!q.empty()){
        path curr=q.front();
        q.pop();
        total++;
        for(int i=0;i<4;i++){
            int nextx=curr.x+dx[i];
            int nexty=curr.y+dy[i];
            if(nextx<0||nexty<0||nextx>=square||nexty>=square)continue;
            if(abs(a[nextx][nexty]-a[curr.x][curr.y])>2)continue;
            if(history[nextx][nexty])continue;
            history[nextx][nexty]=true;
            q.push({nextx,nexty});
        }
    }return total;

}

int main(){
    cin>>square;
    cin>>m>>n;
    for(int i=0;i<square;i++){
        for(int j=0;j<square;j++)cin>>a[i][j];
    }
    cout<<bfs(m,n)<<endl;
   
    return 0;
}