很简单,注意w,h的含义和二维字符数组输入


#include <stdio.h>
#include <string.h>
char map[25][25];
int visted[25][25];
int w,h,cnt;
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
void dfs(int x,int y)
{
if(x>=h||x<0||y>=w||y<0)
return;
if(map[x][y]=='.'&&visted[x][y]==0)
{
++cnt;
visted[x][y]=1;
for(int k=0;k<4;k++)
dfs(x+dir[k][0],y+dir[k][1]);
}
return;
}
int main()
{
int i,j;
int sx,sy;
while(~scanf("%d %d",&w,&h)&&w)
{
for(i=0;i<h;i++)
scanf("%s",map[i]);
/* printf("%c",map[i][j]); printf("*********\n"); if(map[i][j]=='.') */
memset(visted,0,sizeof(visted));
sx=-1;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(map[i][j]=='@')
{
sx=i;
sy=j;
map[i][j]='.';
break;
}
}
if(sx!=-1)
break;
}
cnt=0;
dfs(sx,sy);
printf("%d\n",cnt);
}
return 0;
}
本文介绍了一个使用深度优先搜索(DFS)算法解决二维迷宫问题的C语言实现。通过递归地探索所有可能路径来寻找从指定起点到任意可达位置的最大可达区域。文章详细展示了如何定义迷宫地图、进行边界检查并跟踪已访问区域。
1611

被折叠的 条评论
为什么被折叠?



