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);//符合条件则进入下一层,
	}
}


你可能感兴趣的:(HDU)