其他分享
首页 > 其他分享> > E - Igor In the Museum 连通块dfs思维

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