题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1241
又是经典搜索题!还是那句话,数据量小,要求简单,果断DFS!
这道题目跟以前的题目稍微有点不一样的是方向有点变化,由原来的四方向变成了八个方向,其实是一样的
只不过是在遍历的时候多几个而已,直接给出代码
#include <iostream>
#include<string.h>
using namespace std;
#define N 101
int m,n;
int dirctions[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
int visited[N][N];
char map[N][N];
int sum=0;
void DFS(int x,int y)
{
int nx,ny;
for(int i=0;i<8;i++)
{
nx=x+dirctions[i][0];
ny=y+dirctions[i][1];
if(map[nx][ny]=='@'&&nx>=0&&nx<m&&ny>=0&&ny<n&&visited[nx][ny]==0)
{
visited[nx][ny]=1;
DFS(nx,ny);
}
}
}
int main()
{
int i,j;
while(cin>>m>>n)
{
if(m==0||n==0)
break;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>map[i][j];
memset(visited,0,sizeof(visited));
sum=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='*'||visited[i][j]==1)
continue;
visited[i][j]=1;
DFS(i,j);
sum++;
}
}
cout<<sum<<endl;
}
return 0;
}