#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