1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; char a[1100][1100]; //存储每个点可达的格子数量 int r[1100][1100]; int q[1000100][3]; int n,m; bool f[1100][1100]; int fx[5] = {0,0,1,0,-1}; int fy[5] = {0,1,0,-1,0}; int bfs(int x,int y) { int c = 1; int head=1,tail=1; q[1][1] = x; q[1][2] = y; f[x][y] = true; int tx,ty; while(head<=tail) { for(int i = 1; i <= 4; i++) { tx = q[head][1] + fx[i]; ty = q[head][2] + fy[i]; if((a[q[head][1]][q[head][2]]=='0'&&a[tx][ty]=='1'||a[q[head][1]][q[head][2]]=='1'&&a[tx][ty]=='0')&&f[tx][ty]==false) { tail++; q[tail][1] = tx; q[tail][2] = ty; f[tx][ty] = true; c++; } } head++; } //把队列中的数字对应的结果标记一下 for(int i = 1; i <= tail; i++) { r[q[i][1]][q[i][2]] = c; } return c; } int main() { int i,j,x,y; cin>>n>>m; for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { cin>>a[i][j]; } } memset(r,-1,sizeof(r)); for(i = 1; i <= m; i++) { cin>>x>>y; if(r[x][y] == -1) { r[x][y] = bfs(x,y);//广搜 } cout<<r[x][y]<<endl; } }
- 1
信息
- ID
- 722
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者