hdu 1241 最简单的深搜题!
只是练练手!
#include "stdio.h"
#include "string.h"
char map[105][105];
int m,n;
int dis[8][2]={{1,-1,},{1,0},{1,1},{0,-1},{0,1},{-1,-1},{-1,0},{-1,1}};
void DFS(int x,int y);
int main()
{
int i,j,sum;
while(scanf("%d%d",&m,&n),m+n)
{
sum=0;
getchar();
for(i=0;i<m;i++)
scanf("%s",map[i]);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='@')
{
sum++;
map[i][j]='*'; //对入口进行处理
DFS(i,j);
}
}
}
printf("%d\n",sum);
}
return 0;
}
void DFS(int x,int y)
{
int i,a,b;
for(i=0;i<8;i++)//八个不同的方向
{
a=x+dis[i][0];
b=y+dis[i][1];
if(a<0 || a>=m || b<0 || b>=n || map[a][b]=='*')
continue;
map[a][b]='*'; //(进入前先对原入口进行处理)
DFS(a,b);//符合条件则进入下一层,
}
}
浙公网安备 33010602011771号