题意大致就是在一个矩阵中从从上下左右以及对角线八个方向找到最大的连续'@'
然后思路的话就直接各个点进行深搜,搜完一个点就用‘*’覆盖‘@’来避免重复搜索...
#include<iostream>
using namespace std;
int m,n;
char s[110][110];
int dr[8][2] = {{1,0},{-1,0},{1,1},{-1,-1},{0,1},{0,-1},{1,-1},{-1,1}};
void dfs(int i, int j)
{
int a,b;
for (int x=0; x<8; x++)
{
a = i + dr[x][0];
b = j + dr[x][1];
if (a>=0 && a<m && b>=0 && b<n && s[a][b]=='@')
{
s[a][b] = '*';
dfs(a,b);
}
}
}
int main()
{
while (cin>>m>>n)
{
int cnt = 0;
if (m==0 || n==0)
break;
getchar();
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
scanf("%c",&s[i][j]);
}
getchar();
}
for (int i=0; i<m; i++)
{
for (int j=0; j<n; j++)
{
if (s[i][j] == '@')
{
s[i][j] = '*';
cnt++;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
}
}