【題解】洛谷P1141 01迷宮 bfs
阿新 • • 發佈:2018-12-16
#include<cstdio> #include<queue> using namespace std; int n,m,a[1010][1010],vis[1010][1010],size[1000010],cnt; char s[1010]; int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1}; struct node{ int x,y; node(){} node(int _x,int _y):x(_x),y(_y){} }; void bfs(int x,int y) { ++cnt;size[cnt]=1; queue<node>q;while(q.size())q.pop();q.push(node(x,y));vis[x][y]=cnt; while(q.size()) { node tmp=q.front();q.pop(); for(int i=0;i<4;i++) { int nx=tmp.x+dx[i],ny=tmp.y+dy[i]; if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&!vis[nx][ny]&&(a[nx][ny]^a[tmp.x][tmp.y]==1)) { vis[nx][ny]=cnt;q.push(node(nx,ny));size[cnt]++; } } } } int main() { //freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%s",s+1); for(int j=1;j<=n;j++) a[i][j]=s[j]-'0'; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!vis[i][j]) bfs(i,j); for(int i=1;i<=m;i++) { int x,y;scanf("%d%d",&x,&y); printf("%d\n",size[vis[x][y]]); } return 0; }
總結
無