题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1312
题目描述:
一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。 解题思路: 好吧,搜索入门题,直接广度搜索,标志入队的次数。入队的次数即为行走的步数。
解题思路:基本属于深搜的水题了,每搜索一个方格就改变当前方格的值为 ‘*’,或者任何其他非'.'的值,代表该方格已经走过了,递归的时候就不用重复搜索这个方格了。
#include <stdio.h>
#include <string.h>
int n,m,ans;
char map[30][30];
int to[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int i,int j)
{
ans++;
map[i][j]='#';
for(int k=0;k<4;k++)
{
int x=i+to[k][0];
int y=j+to[k][1];
if(x<n&&y<m&&x>=0&&y>=0&&map[x][y]=='.')
dfs(x,y);
}
return;
}
int main()
{
int i,j,fi,fj;
while(~scanf("%d%d%*c",&m,&n))
{
if(!m&&!n)break;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j] == '@')
{
fi = i;
fj = j;
}
}
getchar();
}
ans=0;
dfs(fi,fj);
printf("%d\n",ans);
}
return 0;
}