玩转算法一:带你用递归探索二维迷宫

本文介绍如何使用递归算法解决迷宫问题,通过二维数组表示迷宫,从左上角找到右下角的出口。文章包含详细思路、代码展示和运行效果,帮助读者理解递归在搜索路径中的应用。
摘要由CSDN通过智能技术生成

前言

玩转算法系列本着带你轻松领略算法的乐趣的宗旨,本人利用业余时间更新,喜欢的可以支持一下。

好,言归正传。大家在生活中可能见过迷宫也可能亲身体验过迷宫,知道迷宫的最大特征就是进去易,出来难。本篇文章就带你体验如何利用递归算法探索迷宫的出路。

下面是运行效果

这里写图片描述

本程序采用c/c++编写,gcc编译器。
首先我们先来定义一个迷宫,采用二维数组,1表示墙,0表示路。
int a[maxsize][maxsize]={
  {
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//1
                         {
  0,0,1,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,1},//2
                         {
  1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1},//3
                         {
  1,0,1,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,0,1},//4
                         {
  1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,1},//5
                         {
  1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,1},//6
                         {
  1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,1,1,1},//7
                         {
  1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,0,0,0,1},//8
                         {
  1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1},//9
                         {
  1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1},//10
                         {
  1,0,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,0,1},//11
                         {
  1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,0,1,0,1},//12
                         {
  1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1},//13
                         {
  1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,1},//14
                         {
  1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1},//15
                         {
  1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,1},//16
                         {
  1,0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,1,0,1},//17
                         {
  1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,0,1,0,1},//18
                         {
  1,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0},//19
                         {
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}//20
                        };

效果即像下面这样
迷宫图

然后就是我们本章的重点了,如何利用递归算法寻找从迷宫的左上角的缺口到达右下角的缺口的路径,并把他们记录下来,就像下面这样:

这里写图片描述

图片看不清的话下面有代码
这是第1条路径,长度为:65
(1,1)->(2,1)->(3,1)->(4,1)->(5,1)->(6,1)->(7,1)->(8,1)->(9,1)->(10,1)->(11,1)->(12,1)->(13,1)->(14,1)->(14,2)->(14,3)->(14,4)->(14,5)->(13,5)->(12,5)->(11,5)->(10,5)->(10,6)->(10,7)->(10,8)->(10,9)->(11,9)->(11,10)->(11,11)->(11,12)->(11,13)->(10,13)->(9,13)->(8,13)->(7,13)->(6,13)->(5,13)->(4,13)->(4,14)->(3,14)->(2,14)->(1,14)->(1,15)->(1,16)->(2,16)->(3,16)->(4,16)->(5,16)->(6,16)->(7,16)->(8,16)->(9,16)->(10,16)->(11,16)->(12,16)->(13,16)->(14,16)->(15,16)->(16,16)->(17,16)->(18,16)->(18,17)->(18,18)->(18,19)->(0,0)->
这是第2条路径,长度为:74
(1,1)->(2,1)->(3,1)->(4,1)->(5,1)->(6,1)->(7,1)->(8,1)->(9,1)->(10,1)->(11,1)->(12,1)->(13,1)->(14,1)->(14,2)->(14,3)->(14,4)->(14,5)->(13,5)->(12,5)->(11,5)->(10,5)->(10,6)->(10,7)->(10,8)->(10,9)->(11,9)->(11,10)->(11,11)->(11,12)->(12,11)->(13,11)->(14,11)->(14,12)->(14,13)->(14,14)->(13,14)->(12,14)->(12,13)->(11,13)->(10,13)->(9,13)->(8,13)->(7,13)->(6,13)->(5,13)->(4,13)->(4,14)->(3,14)->(2,14)->(1,14)->(1,15)->(1,16)->(2,16)->(3,16)->(4,16)->(5,16)->(6,16)->(7,16)->(8,16)->(9,16)->(10,16)->(11,16)->(12,16)->(13,16)->(14,16)->(15,16)->(16,16)->(17,16)->(18,16)->(18,17)->(18,18)->(18,19)->(0,0)->
这是第3条路径,长度为:73
(1,1)->(2,1)->(3,1)->(4,1)->(5,1)->(6,1)->(7,1)->(8,1)->(9,1)->(10,1)->(11,1)->(12,1)->(13,1)->(14,1)->(14,2)->(14,3)->(14,4)->(14,5)->(13,5)->(12,5)->(11,5)->(10,5)->(10,6)->(10,7)->(10,8)->(10,9)->(9,7)->(8,7)->(7,7)->(6,7)->(5,7)->(4,7)->(4,6)->(3,6)->(2,6)->(1,6)->(1,7)->(1,8)->(1,9)->(2,9)->(3,9)->(4,9)->(4,10)->(4,11)->(4,12)->(4,13)->(4,14)->(3,14)->(2,14)->(1,14)->(1,15)->(1,16)->(2,16)->(3,16)->(4,16)->(5,16)->(6,16)->(7,16)->(8,16)->(9,16)->(10,16)->(11,16)->(12,16)->(13,16)->(14,16)->(15,16)->(16,16)->(17,16)->(18,16)->(18,17)->(18,18)->(18,19)->(18,14)->
这是第4条路径,长度为:74
(1,1)->(2,1)->(3,1)->(4,1)->(5,1)->(6,1)->(7,1)->(8,1)->(9,1)->(10,1)->(11,1)->(12,1)->(13,1)->(14,1)->(14,2)->(14,3)->(14,4)->(14,5)->(13,5)->(12,5)->(11,5)->(10,5)->(10,6)->(10,7)->(10,8)->(10,9)->(9,7)->(8,7)->(7,7)->(6,7)->(5,7)->(4,7)->(4,6)->(3,6)->(2,6)->(1,6)->(1,
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值