牛客网---C语言完成迷宫问题

首先malloc一个N行M列的空间,然后用scanf进行接收测试案例

因为测试案例不止一个,所以我们需要用到while(scanf("%d%d",&N,&M)!=EOF)   持续接收。

然后我们需要创建一个结构体 结构体里包含所在位置的列。

                                                                              

然后我们还需要一个栈 进行存储。

因为C语言没有栈的库函数,所以我们需要自行写一个栈出来。

创建好栈后 。

我们先对栈取名为path,再进行初始化。

先创建一个新的点 就是左上角的位置

再依次把申请好的空间maze,N ,M 和左上角的位置传入

进入函数后。

1.先把这个位置入栈( 后续递归时,每次都要把当前位置入栈)。

2.再对当前位置进行判断是否已经到了终点。

3.再把当前位置进行赋值 (意义在于防止走到下一个位置时,下一个位置又可以跑到上一个位置)

接下来我们需要对这个位置的上,下,左,右进行判断是否可以走。

避免代码的重复性,我们把判断位置合法性的代码封装为一个函数IsPass ,当合法时,进行递归。

进入到下一个位置(这里的if语句判断递归语句是判断当前位置走到下一个位置时,当这个下一个位置是终点时,我们直接return true。

当上,下,左,右都不能走时 (就是遇到死路了,我们需要出栈,因为当前这个位置不是正确的路径,我们栈中需要存储正确的路径

再return false 返回上一个位置(对其他的路进行判断 ,是否有其他的路可以走

对迷宫进行判断的函数已经写好了,我们可以返回main里,对栈的倒入了。

依旧先判断迷宫是否能找到正确的通路,如果能(进行对栈的倒入)如果不能(打印”不能找到通路“)

(一般题目都是可以找到正确通路的,除非题目有给出可能找不到正确的通路,这里是给代码提供完整性)

对栈进行倒入用一个函数名为PirnPath   

PirnPath函数实现

1.我们再创建一个新的栈,然后对这个栈进行初始化

2. 把之前的path栈内的元素倒入倒新的栈中,就变成了正确的路径

3.用结构体 top来放栈顶元素 再依次按照题目要求打印

4.最后要记得释放栈

然后我们还要对刚才的path和申请的名为maze的空间进行释放

就大功告成了!

运行结果

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值