首页 > 代码库 > 新学的深搜
新学的深搜
/*深搜的灵魂所在就是递归*/
//以此题为例http://acm.hdu.edu.cn/showproblem.php?pid=1312
#include<stdio.h>
#include<string.h>
char map[25][25];
int n,m;
int mark[25][25];
void dfs(int x,int y)
{
if(x>=0&&y>=0&&x<n&&y<m)
{
if(map[x][y]==‘.‘&&mark[x][y]==0)
{
mark[x][y]=1;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
}
int main()
{
while(scanf("%d %d",&m,&n)&&(n!=0&&m!=0))
{
memset(mark,0,sizeof(mark));
int i,j;
int x,y;
for(i=0;i<n;i++)
{
scanf("%s",&map[i]);
}
int flag=0;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]==‘@‘)
{
x=i;
y=j;
flag=1;
break;
}
}
if(flag)
break;
}
map[i][j]=‘.‘;
dfs(x,y);
int ans=0;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
ans+=mark[i][j];
}
}
printf("%d\n",ans);
}
return 0;
}
新学的深搜