HDU 1312 Red and Black

来源:互联网 发布:淘宝高仿鞋店推荐 编辑:程序博客网 时间:2024/04/30 09:42
 题目大意:一个人在一个铺满红砖和黑砖的房间里面走,只能走黑砖,并且只能上下左右走。让你输入放假宽和长(开始没仔细看,以为长和宽,结果一直不对,囧),再给你这个人的初始位置,问这个人最多能走多少块黑砖。我的第一道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;}