0
点赞
收藏
分享

微信扫一扫

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

忆北文学摄影爱好员 2022-02-01 阅读 42
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的空间进行释放

就大功告成了!

运行结果

举报

相关推荐

0 条评论