蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 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; }
运行结果如下: