HDU 1312 Red and Black

 题目大意:一个人在一个铺满红砖和黑砖的房间里面走,只能走黑砖,并且只能上下左右走。让你输入放假宽和长(开始没仔细看,以为长和宽,结果一直不对,囧),再给你这个人的初始位置,问这个人最多能走多少块黑砖。我的第一道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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值