hdu1241较简单的搜索

#include<stdio.h>
#include<string.h>

int dir[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};
int z;
char a[110][110];
int  b[110][110];
void sousuo(int xi,int xj)
{   
    for(int i=0;i<=7;i++)
	{
	if(a[xi+dir[i][0]][xj+dir[i][1]]=='@'&&b[xi+dir[i][0]][xj+dir[i][1]]==0)
	{ 
	   b[xi+dir[i][0]][xj+dir[i][1]]=z;
	   
	  // printf("xi=%d xj=%d\n",xi,xj);
	   sousuo(xi+dir[i][0],xj+dir[i][1]);
	}
	}
}
int main()
{   int m,n,i,j;
	while(scanf("%d%d",&m,&n)!=EOF)
	{  
		getchar(); z=0;
		if(m==0) break;
		
		
		for(i=0;i<=m-1;i++)
		{
           
			
		   gets(a[i]);
		   //不要加getchar(),不然会错,检查了好久;
		   
		   
		}
		for(i=0;i<=m-1;i++)
		{
           for(j=0;j<=n-1;j++)
           {b[i][j]=0;
		   //printf("%c",a[i][j]);
           }
          // printf("\n");
		}
		for(i=0;i<=m-1;i++)
		{
			for(j=0;j<=n-1;j++)
		  if(a[i][j]=='@'&&b[i][j]==0) 
		  {z++;b[i][j]=z;sousuo(i,j);/*printf("i=%d,j=%d\n",i,j);*/}
		}
	/*	for(i=0;i<=m-1;i++)
		{
			for(j=0;j<=n-1;j++)
			printf("%d",b[i][j]);
			printf("\n");
		}*/
		
		printf("%d\n",z);
		

		
	}
}

 

posted @ 2013-04-14 15:48  宛如  阅读(128)  评论(0编辑  收藏  举报