dfs算法
附上代码:
#include<stdio.h>
#include<string.h>
#define N 20+10
int w,h,I,J;
char s[N][N];
int vis[N][N];
int mov[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y)
{
int i,j,k,tx,ty;
vis[x][y]=1;
for(i=0;i<4;i++)
{
tx=x+mov[i][0];
ty=y+mov[i][1];
if(tx<h&&tx>=0&&ty>=0&&ty<w&&!vis[tx][ty]&&s[tx][ty]!='#')
{
dfs(tx,ty);
continue;
}
}
return;
}
int main()
{
int i,j,k,n,m;
int counter;
//freopen("D:\\in.txt","r",stdin);
while(scanf("%d%d",&w,&h)==2&&(w||h))
{
memset(vis,0,sizeof(vis));
counter=0;
getchar();
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
scanf("%c",&s[i][j]);
if(s[i][j]=='@')
{
I=i;
J=j;
}
}
getchar();
}
dfs(I,J);
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
if(vis[i][j]==1)
{
counter++;
}
}
printf("%d\n",counter);
}
return 0;
}