题目链接。题目大意:给一张图,带有@的区域是一块油田,只要是在@上下左右以及对角线八个方向的被视为一块油田,寻找图中有多少块油田。这个是一个简单的dfs,对于当前点进行八个方向搜索,一直达到不可搜索的位置退出,应该是挺简单的,注意一下递归的出口就行。附上AC代码:
#include<bits/stdc++.h>
const int maxn = 110;
using namespace std;
char mp[maxn][maxn];
int m, n;
int dir[8][2] = { 0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};//八方向搜索
void dfs(int a, int b)
{
if (mp[a][b] != '@' || a<0 || b<0 || a>n || b>m)return;
mp[a][b] = '*';
int dx = 0, dy = 0;
for (int i = 0; i < 8; i++)
{
dx = a + dir[i][0];
dy = b + dir[i][1];
dfs(dx, dy);
}
return;
}
int main()
{
while (scanf("%d%d", &n, &m) && n&&m)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf(" %c", &mp[i][j]);
int ans = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (mp[i][j] == '@')
{
dfs(i, j);
++ans;
}
}
}
printf("%d\n", ans);
}
}