题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1241
这道题目刚开始看成是四个方向,第二个测试数据一直不对。最后让师哥看了一下,说是8个方向,恍然大悟。改了就对了。
#include <iostream>
using namespace std;
char map[110][110];
int dir[][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}}; //这块一定要记得是8个方向。
int M, N, countn;
void dfs(int x, int y)
{
int i;
for(i = 0; i < 8; i++)
{
int X = x + dir[i][0];
int Y = y + dir[i][1];
if(X>=0&&X<M&&Y>=0&&Y<N&&map[X][Y]=='@')
{
map[X][Y] = '*';
dfs(X, Y);
}
}
}
int main()
{
int i, j;
while(cin>>M>>N,M+N)
{
countn = 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]=='@')
{
countn++;
dfs(i,j);
}
}
}
cout<<countn<<endl;
}
return 0;
}