BFS求助大佬,感谢!
查看原帖
BFS求助大佬,感谢!
181715
gjh303987897楼主2022/3/1 00:31
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[1001][1001],queue[10001],l=1,r=1,ans,n,m;
int vis[1001][1001]; 
const int jump_x[5]={0,1,1,-1,-1};
const int jump_y[5]={0,1,-1,1,-1};
struct dfs{
    int x,y;
}t[1000001];
//use queue to finish
int deal(int x,int y){
    t[l].x=x; t[l].y=y; vis[x][y]=true; ans=0; l=r=1;
    memset(vis,0,sizeof(vis));
    while(l<=r){
        vis[t[l].x][t[l].y]=true;
        for(int i=1;i<=4;i++){
            int nx=x+jump_x[i],ny=y+jump_y[i];
            if(f[nx][ny]+f[x][y]==1&&!vis[nx][ny]&&nx>0&&ny>0&&nx<=n&&ny<=n){
                r++; ans++;
                t[r].x=nx; t[r].y=ny;
            }
        }
        l++;
    }
    return ans;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>f[i][j];
        }
    }
    for(int i=1;i<=m;i++){
        int x,y; cin>>x>>y; cout<<deal(x,y);
    }
    return 0;
}
2022/3/1 00:31
加载中...