[计蒜客(蓝桥杯省赛)]踏青 原创

题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛)

算法标签 dfs,bfs,搜索

题目描述

在这里插入图片描述

思路

题目当中需要注意的信息是:

连续得草丛就算作一块草地
一块草地可以互相看见

那么我们找的人手就转换为了找草地得数量。

即我们找到一块草丛之后就遍历整个连通量,然后计算为+1,最终输出答案即可。

题目代码

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;
const int N=150;
char g[N][N];
bool st[N][N];
int n,m,ans;

int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
void dfs(int x,int y)
{
  if(g[x][y]=='.')return;//非草丛,返回
  
  st[x][y]=true;//标记走过
  for(int i=0;i<4;i++)
  {
    int tx=x+dx[i],ty=y+dy[i];//周边
    if(tx<1||tx>n||ty<1||ty>m)continue;//边界
    if(st[tx][ty])continue;//已走过
    if(g[tx][ty]=='#')//符合条件的草丛
       dfs(tx,ty);
  }
}

int main()
{
  cin>>n>>m;
	
  for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
        	cin>>g[i][j];
  
  int x=0,y=0;
  for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
			if(g[i][j]=='#'&&st[i][j]==false)
              dfs(i,j),ans++;//找到没有走过的草丛,遍历整个联通量。
  
  cout<<ans;
  return 0;
}
posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示