这道题还算简单,题意是求在这10*12的矩阵中有几个 联通的W区域。
大概就是用dfs,深度搜索,从(0,0)开始,只要搜到W,就将计数变量自增,然后开始dfs,并将访问过的W变为
。即可,最后的计数变量的值就是联通区域个数。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
#include <set>
using namespace std;
int N, M;
int cnt = 0;
char m[550][550]={'.'};
void DFS(int i, int j)
{
if(m[i][j] == 'W')
m[i][j] = '.';
else
return;
DFS(i+1,j);
DFS(i+1,j+1);
DFS(i+1,j-1);
DFS(i-1,j);
DFS(i-1,j+1);
DFS(i-1,j-1);
DFS(i,j+1);
DFS(i,j-1);
return;
}
void dfs()
{
int i, j;
for(i=1; i<=N; i++)
{
for(j=1; j<=M; j++)
{
if(m[i][j] == 'W'){
cnt++;
DFS(i, j);
}
}
}
}
int main()
{
cin >> N >> M;
int i,j;
for(i=1; i<=N; i++)
{
for(j=1; j<=M; j++)
{
cin >> m[i][j];
}
}
dfs();
cout << cnt <<endl;
return 0;
}