E - Igor In the Museum 连通块dfs思维
作者:互联网
传送门
思路:每个连通块dfs一次,并记录所在连通块的Value。这样就做了一次剪枝。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char G[1005][1005];
int vis[1005][1005];
int cnt[100005];
int n, m;
void dfs(int x, int y, int ans)
{
if(vis[x][y] || x < 1 || x > n || y < 1 || y > m || G[x][y] == '*')
return ;
vis[x][y] = ans;
if(G[x][y + 1] == '*')
cnt[vis[x][y]]++;
if(G[x][y - 1] == '*')
cnt[vis[x][y]]++;
if(G[x + 1][y] == '*')
cnt[vis[x][y]]++;
if(G[x - 1][y] == '*')
cnt[vis[x][y]]++;
dfs(x, y + 1, ans);
dfs(x + 1, y, ans);
dfs(x, y - 1, ans);
dfs(x - 1, y, ans);
}
int main()
{
int k;
scanf("%d %d %d",&n, &m, &k);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin >> G[i][j];
int sum = 0;
while(k--)
{
++sum;
int x, y;
scanf("%d %d",&x, &y);
if(vis[x][y])
cout << cnt[vis[x][y]] << endl;
else
{
dfs(x, y, sum);
cout << cnt[vis[x][y]] << endl;
}
}
return 0;
}
是水还是流年
发布了235 篇原创文章 · 获赞 8 · 访问量 4546
私信
关注
标签:cnt,Igor,int,Museum,++,dfs,vis,ans 来源: https://blog.csdn.net/weixin_43960370/article/details/104069023