本文主要是介绍【c++基础】数池塘(八方向),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明
农夫约翰的农场可以表示成N*M(1≤N≤100≤M≤100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水('W')或者没有积水('.')。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。现给出约翰农场的图样,要求输出农场上的池塘数。
输入数据
第1行:由空格隔开的两个整数:N和M
第2..N+1行:每行M个字符代表约翰农场的一排方格的状态。每个字符或者是'W'或者是'.',字符之间没有空格。
输出数据
输出只有1行,输出约翰农场上的池塘数
题解
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt=0;
char a[105][105];
void dfs(int x,int y)
{if(x<1||x>n||y<1||y>m)return ;if(a[x][y]=='.')return ; if(a[x][y]=='W')a[x][y]='.';dfs(x-1,y);dfs(x+1,y);dfs(x,y-1);dfs(x,y+1);dfs(x-1,y-1);dfs(x+1,y-1);dfs(x-1,y+1);dfs(x+1,y+1);
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]=='W'){dfs(i,j);cnt++;}}}cout<<cnt;return 0;
}
这篇关于【c++基础】数池塘(八方向)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!