【dfs】机器人的运动范围

本文探讨了深度优先搜索(DFS)算法在路径计数问题中的应用,强调了使用vis数组跟踪已访问节点的重要性,并解释了如何正确计算可达格子数量。通过一个示例问题,介绍了AC代码实现细节,包括全局变量的初始化和递归调用过程。

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

大致思路:

显然用dfs,但是我没注意到:

①dfs也要vis数组!!!而且,我其实常用的是第一次传第一个点进去,所以要在主函数里先把第一个点的vis设1!!!!

②也是本题的重点:问的是“能够到达多少个格子”,这个意思不是说一条路径上最多能有多少个格子,而是若干条路径上,只要能走到就算!所以,这里并不是在dfs前先vis=1,之后就立刻vis=0。因为:以前的思路是另一条路线可以去走其他路线走过的,但是这里的话,是全局来看的,所以走过就是走过,就不要再走,所以不用再让vis=0了!

——所以,这里也不是去更新什么最大值maxx,而是只要走到一个点,就maxx++

③很奇怪。。。牛客网oj在全局设vis数组并没有默认全部为0,我真是醉了,为了保险,还是在主函数里把数组初始化为全0吧,默不默认的真的不好说。。。。

AC代码:

class Solution {
public:
    int maxx=0;
    int xx[4]={-1,1,0,0};
    int yy[4]={0,0,-1,1};
    int vis[500][500];
    int row,col;
    int movingCount(int threshold, int rows, int cols)
    {
        if(threshold<0)
            return 0;
        for(int i=0;i<500;i++)
            for(int j=0;j<500;j++)
                vis[i][j]=0;
        row=rows;
        col=cols;
        vis[0][0]=1;
        dfs(0,0,threshold);
        return maxx;
    }

    
    void dfs(int x,int y,int k) //当前在(x,y).
    {
        maxx++;
        for(int i=0;i<4;i++) //四个方向去找可以走的
        {
            int xxx=x+xx[i];
            int yyy=y+yy[i];
            if(xxx<0 || xxx>=row || yyy<0 || yyy>=col || vis[xxx][yyy]==1 || xxx/10+xxx%10+yyy/10+yyy%10>k)
                continue;
            vis[xxx][yyy]=1;
            dfs(xxx,yyy,k);
        }
    }
    
};





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值