//这题经典dfs,不过告诉我一个道理,方向什么的列举好了,写数组循环容易各种智障犯错误,,,,
#include <iostream>
#include <stdio.h>
using namespace std;
char map[101][101];
int n, m, sum;
void dfs(int i, int j)
{
//若该点不可行或越界,返回
if(map[i][j]!='@' || i<0 || j<0 || i>=m || j>=n) return;
else //否则,标记该点为不可行,再往8个方向深搜
{
map[i][j] = '!';
dfs(i-1, j-1);
dfs(i-1, j);
dfs(i-1, j+1);
dfs(i, j-1);
dfs(i, j+1);
dfs(i+1, j-1);
dfs(i+1, j);
dfs(i+1, j+1);
}
}
int main()
{
int i, j;
while(cin>>m>>n)
{
if(m==0 || n==0) break;
sum = 0;
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
cin>>map[i][j];
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
{
if(map[i][j] == '@')
{
dfs(i, j);
sum++;
}
}
}
cout<<sum<<endl;
}
return 0;
}
1241水dfs连接在一起的算一个
猜你喜欢
转载自blog.csdn.net/qq_40061421/article/details/79969505
今日推荐
周排行