#include <iostream>
#include <cstdio>
using namespace std;
int m, n;
char Graph[100][100];
int Count = 0; //代表要塞数量
void dfs(int x, int y); //代表进行dfs的函数
void dfs(int x, int y)
{
int movex, movey;
int i, j;
Graph[x][y] = ‘*‘; //把已经遍历过的‘@‘变成‘*‘,以免重复遍历
for (i = -1; i <= 1; i++)
{
for (j = -1; j <= 1; j++) //进行八个方向的遍历
{
movex = x + i; //进行移动
movey = y + j;
if (movex >= 0 && movex < m && movey >= 0 && movey < n && Graph[movex][movey] == ‘@‘)
{
dfs(movex, movey); //继续向下遍历
}
}
}
}
int main()
{
int i, j;
while (scanf("%d %d", &m, &n) != EOF)
{
if (m == 0 && n == 0)
{
return 0;
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cin >> Graph[i][j];
}
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (Graph[i][j] == ‘@‘)
{
dfs(i, j);
Count++;
}
}
}
cout << Count << endl;
Count = 0;
}
}
原文:https://www.cnblogs.com/gao79135/p/14085526.html