题目大意:一个人在一个铺满红砖和黑砖的房间里面走,只能走黑砖,并且只能上下左右走。让你输入放假宽和长(开始没仔细看,以为长和宽,结果一直不对,囧),再给你这个人的初始位置,问这个人最多能走多少块黑砖。我的第一道DFS,类似入门经典6.4.1的黑白图像那个,照葫芦画瓢,还不会解,参考大牛代码,
终于理解,并AC了。。。由于w,h不超过20,递归解出即可。DFS的代码随后在上,先上递归代码。
#include<stdio.h>
#include<string.h>
char G[22][22];
int w,h;
int xc,yc;
int dfs(int x,int y)
{
if(x<0||x>=h||y<0||y>=w) //判断边界溢出
{
return 0;
}
if(G[x][y]=='#')
{
return 0;
}
if(G[x][y]=='.'||G[x][y]=='@')
{
G[x][y]='#'; //走过的只需记录变成'#',不需要记录数组了。
return 1+dfs(x-1,y)+dfs(x+1,y)+dfs(x,y-1)+dfs(x,y+1);
//递归遍历四周的点
}
}
int main()
{
int i,j;
while(scanf("%d %d",&w,&h)!=EOF)
{
if(w==0&&h==0)
{
break;
}
for(i=0; i<h; i++)
{
getchar();
for(j=0; j<w; j++)
{
scanf("%c",&G[i][j]);
if(G[i][j]=='@')//记录初始位置。
{
xc=i;
yc=j;
}
}
}
int ans=dfs(xc,yc); //从初始位置出发.
printf("%d\n",ans);
}
return 0;
}