首先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的空间进行释放
就大功告成了!
运行结果