/*
这个题目主要是找到某个油井'@',然后用DFS函数对其上下左右以及和其对角线上的
点进行搜索,把其周围的油井标记为非油井'*' ,直到其周围所有的点都被访问了
之后就返回到主函数中,表示一个油井泵。
*/
#include<iostream>
#include<string>
using namespace std;
char st[102][102];
int s[8][2] = {{1,0},{-1,0},{-1,1},{-1,-1},{1,1},{1,-1},{0,1},{0,-1}};//用来控制方向
int n, m;
void dfs(int x, int y)//DFS深搜函数
{
int sx, sy;
for(int i = 0; i < 8; i++)
{
sx = x + s[i][0];
sy = y + s[i][1];
if(st[sx][sy]=='@' && (sx>=1&&sx<=n&&sy>=1&&sy<=m))//要保证已知油井周围的点在范围内
{
st[sx][sy] = '*';
dfs(sx,sy);//函数递归
}
}
}
int main()
{
while(cin >> n >> m && n||m)
{
int sum = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cin >> st[i][j];
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(st[i][j] == '@')
{
sum++;
st[i][j] = '*';
dfs(i,j);
}
cout << sum << endl;
}
return 0;
}
HUD 1241 搜索 三维深搜
最新推荐文章于 2019-08-21 19:06:20 发布