简单的深搜

一个机器人可以前后左右移动,问移动N次有多少种路径;

如移动一次可以前后左右移动有4种路径;注意:每条路径中不会有每个地方只能走一次;

一个很简单的深搜题,比较基础; 假设机器人最多移动15次,int就可以啦,移动16次就要long long了

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#define MAX 50000+5
using namespace std;
bool book[100*100][100*100];              //标记该地点是否被走过,100*100的地图;
int cnt=0;                               //记录路径的数目;
int N;                                      //机器人移动的次数;
int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; //前后左右移动;
void dsf(int x, int y, int step){        //深搜核心代码;
    if(step==N){                        //如果走了N步就return;
        cnt++;
        return;
    }
   book[x][y]=1;                        //标记走过的路径;
    int k=4;
    int tx, ty;
    for(k=0; k<=3; k++){
        tx=x+next[k][0];
        ty=y+next[k][1];
        if(book[tx][ty]==0){          //判断是否走过;
            book[tx][ty]=1;
            dsf(tx,ty,step+1);
            book[tx][ty]=0;          //消除标记;不可缺少;
        }
    }
}
int main(){
   while(scanf("%d",&N),N){
    memset(book, 0, sizeof(book));
    book[15][15]=1;
    cnt=0;
    dsf(15, 15, 0);
    printf("%d\n",cnt);
   }
    return 0;
}


动态规划和深度优先搜索(DFS)是两种不同的算法,各自有着不同的优劣势。 动态规划是一种通过将问题分解成子问题并记录子问题的最优解来解决复杂问题的方法。它适用于具有重叠子问题和最优子结构性质的问题。优点是可以避免重复计算,通过缓存中间结果来提高效率。它可以在多项式时间内求解一些经典问题,如最长公共子序列、背包问题等。但是,动态规划需要额外的空间来存储中间结果,对于一些问题可能需要较多的存储空间。 深度优先搜索是一种用于遍历或搜索图或树的方法,它通过尽可能深地搜索节点的分支来查找解决方案。它具有简单的实现和理解,不需要额外的存储空间。深度优先搜索在解决一些问题时具有一些优势,例如在寻找所有可能解的情况下。但是,深度优先搜索可能会陷入无限循环,需要正确处理循环和重复的状态。此外,深度优先搜索可能会找到一个解,但不一定是最优解。 综上所述,动态规划适用于具有最优子结构性质的问题,可以在多项式时间内求解一些经典问题,但需要额外的存储空间。而深度优先搜索适用于遍历或搜索图或树的问题,可以找到一个解,但不一定是最优解,并且不需要额外的存储空间。所以根据具体问题的性质和要求,选择合适的算法可以更高效地解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [3、动态规划之基础介绍1](https://download.csdn.net/download/weixin_35830270/86319505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python宽搜(BFS)和深搜(DFS)](https://blog.csdn.net/weixin_45758642/article/details/122945316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值