今天才看了dfs,找了道题练练手
dfs:深度优先搜索,从某个状态开始,不断的转移状态直到无法转移,然后回到先前的一步继续转移其他状态,直到找到最终解
#include<iostream>
using namespace std;
char lake[102][102];//数组开大一点,防止判断周围8各个子的时候越界出错
void dfs(int x,int y)//深度优先dfs
{
lake[x][y]='.';//把每个有水的格子清空 'W'->'.'
if(lake[x-1][y-1]=='W') dfs(x-1,y-1);
if(lake[x-1][y]=='W') dfs(x-1,y);
if(lake[x-1][y+1]=='W') dfs(x-1,y+1);
if(lake[x][y-1]=='W') dfs(x,y-1);
if(lake[x][y+1]=='W') dfs(x,y+1);
if(lake[x+1][y-1]=='W') dfs(x+1,y-1);
if(lake[x+1][y]=='W') dfs(x+1,y);
if(lake[x+1][y+1]=='W') dfs(x+1,y+1);
}
int main()
{
int N,M,Count=0;
cin>>N>>M;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
cin>>lake[i][j];
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
if(lake[i][j]=='W')
{
dfs(i,j);
Count++;
}
}
}
cout<<Count;
return 0;
}