HDU 1312 Red and Black

本文介绍了一种使用递归方法解决黑白砖路径问题的算法实现,详细解释了DFS算法的应用过程,包括边界判断、路径标记以及路径计数。通过实例演示,展示了如何根据给定的房间尺寸和起始位置,计算出最多可以行走的黑砖数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值