一道DFS题。
在迷宫中如果能从一个点A到点B那么也可也从点B到点A。
那么只要从一个点开始搜索,然后将所有搜到的点赋上同一个值就行了。
这题数据比较大,所以要先预处理一遍然后O(1)查询。
这好像是一道经典的BFS题
#include<iostream> #include<cstring> using namespace std; int n,m,ans[1005][1005],as,kans[1000005]; int map[1005][1005]; void g(int x,int y,int bl); int main() { char q; int i,j; int a,b; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { cin>>q; if(q=='1') map[i][j]=1; else map[i][j]=0; } for(i=0;i<=n+1;i++) { map[0][i]=-1; map[i][0]=-1; map[n+1][i]=-1; map[i][n+1]=-1; } as=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(ans[i][j]==0) { as++; g(i,j,!map[i][j]); } for(i=1;i<=m;i++) { cin>>a>>b; cout<<kans[ans[a][b]]<<endl; } return 0; } void g(int x,int y,int bl) { if(ans[x][y]!=0) return ; if(map[x][y]==bl) return ; if(map[x][y]==-1) return ; ans[x][y]=as; kans[as]++; g(x+1,y,!bl); g(x,y+1,!bl); g(x-1,y,!bl); g(x,y-1,!bl); return ; }