标签:blank can str The return code \n 保存状态 ble
题目链接:Igor In the Museum
思路:
先对可以通行的格子做一次搜索,搜出通过该格子以及与这个格子联通的可通行道路上一共能看多少幅画,保存状态后,对于询问可以直接得知答案,不用对每次询问都搜索一次。
代码:
#include <cstdio> #include <cstring> #define maxn 1001 int id, ans; int n, m; char G[maxn][maxn]; int v[maxn][maxn], r[maxn*maxn]; int ac[4][2]={0, 1, 0, -1, -1, 0, 1, 0}; void dfs(int x, int y) { v[x][y]=id; for(int i=0; i<4; i++) { int nx=x+ac[i][0]; int ny=y+ac[i][1]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&!v[nx][ny]) { if(G[nx][ny]==‘*‘) ans++; else dfs(nx, ny); } } } int main() { int k; while(scanf("%d%d%d", &n, &m, &k)!=EOF) { for(int i=1; i<=n; i++) scanf("%s", G[i]+1); memset(v, 0, sizeof(v)); id=0; for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(G[i][j]==‘.‘&&!v[i][j]) { ans=0; id++; dfs(i, j); r[id]=ans; } } } while(k--) { int x, y; scanf("%d%d", &x, &y); printf("%d\n", r[v[x][y]]); } } return 0; }
标签:blank can str The return code \n 保存状态 ble
原文地址:https://www.cnblogs.com/KasenBob/p/10888471.html