DFS:踏青

简介: DFS:踏青

     蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 444 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#‘代表草丛,’.'代表空地,下面的峡谷中有 2片草地。

##..
..##

       处在同一个草地的 2个人可以相互看到,空地看不到草地里面的人。他们发现有一个朋友不见了,现在需要分头去找,每个人负责一片草地,蒜头君想知道他们至少需要多少人。


输入格式


       第一行输入 n, m (1≤n,m≤100) 表示峡谷大小


       接下来输入 n行字符串表示峡谷的地形。


输出格式:


       至少需要多少人

#include <iostream>
using namespace std;
string a[105]; 
bool b[105][105];
int n,m;
void dfs(int x,int y){
  if(x<0 || x>=n || y<0 || y>=m || a[x][y]=='.' || b[x][y]){
    return;
  }
  b[x][y]=true;
  dfs(x-1,y);
  dfs(x,y-1);
  dfs(x+1,y);
  dfs(x,y+1);
}
int main(){
  int number=0;
  cin>>n>>m;
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      if(a[i][j]=='#' && !b[i][j]){
        dfs(i,j);
        number++;
      }
    }
  }
  cout<<number<<endl;
  return 0;
}

运行结果如下:

相关文章
|
4月前
|
算法
DFS算法的实现
DFS算法的实现
69 3
|
6月前
|
C++
|
6月前
|
算法 索引
DFS算法及应用(二)
回溯:回溯就是DFS的一种,在搜索探索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试其他路径。
|
6月前
|
算法
DFS算法及应用(一)
DFS(深度优先搜索)是一种图遍历算法,常用于解决穷举问题,如全排列、迷宫问题、图的连通性等。它沿着树的深度分支进行探索,直至达到叶子节点,若无法继续则回溯。例如,将数字6拆分为3个正整数的递增序列问题可以通过DFS实现,类似地,分糖果问题和买瓜问题同样可以用DFS求解。DFS通常涉及递归或栈结构,通过标记已访问节点避免重复。在编程中,会定义递归函数,设定结束条件,然后枚举可能的情况,并处理下一层节点。
|
机器学习/深度学习 人工智能 定位技术
|
C语言 C++
【DFS练习】素数环
【DFS练习】素数环
119 0
|
算法
DFS and BFS
DFS and BFS
53 0
|
存储 算法 PHP
深度优先搜索(DFS)
深度优先搜索(DFS)
253 0
深度优先搜索(DFS)