对迷宫问题应用深度搜索算法,利用python代码实现过程中出现的一些不成熟想法

声明:仅为本人学习过程中的一些不成熟想法

0.前情提要

        迷宫问题指通过设计算法,从一个点在特定环境移动到另一个点.

        目前的解决算法:深度搜索算法:从一个点出发,选择一个方向,直到没有方向可以前进,则退回到上一个有方向前进的点,从另一个方向继续搜索.

1.问题解决路径

1.1 解决问题思路

        对于该问题,

        Ⅰ 首先想到的思路是:

                ①建立一个方向搜索函数,按照东南西北的方向搜索可以前进的方向,一旦有一个方向可以前进,给出前进坐标,并退出函数,否则返回-1(表示无看前进方向).

                ②循环方向搜索,直到当前坐标点为结束坐标点(终止条件)

                ③利用栈存储已经进过的坐标点

        Ⅰ.Ⅱ 遇到的问题:

                ①未考虑到:先前移动的方向,导致方向搜索函数在某些条件下会出现倒退的情况,造成了倒退-前进的死循环.

                ②基础知识的错误,对列表索引使用了元组,但一直未曾发现(警惕此情况再次发生)

        Ⅱ 修改后的思路:

                Ⅰ.Ⅰ 修改的方向:

                        ①添加一个上一点到目前坐标点的前进方向的标志位pre_direction,并用标志位修改方向搜索函数,具体指修改每个方向搜索函数的if条件语句,在其''pre_direction!=各方向代表数''

                        各方向代表数按此规律表示:东:1,南:2,西:3,北:4

                        ①.①发现的问题:按此规律表示,没有发现简单的计算式可以成功计算出相应标志位.

                        ①.②对应修改思路:修改规律为:东:1.南:2,西:-1,北:-2

                Ⅰ.Ⅱ 遇到的问题

                        ①在按照公式:pre_direction=2*(当前位置的行坐标-先前位置的行坐标)+当前位置的列坐标-先前位置的列坐标,计算后运行代码,仍然出现了后退-前进的逻辑死循环,情况未有改变.

                Ⅰ.Ⅱ.Ⅰ 修改的方向

                                ①虽然添加方向标志位并没有改变问题,但添加方向标志位的思路没有问题,所有考虑将先前的pre_direction更换到逻辑上代表当前位置不能前进方向no_direction(即上一个位置点到当前位置点的反方向),同时更新公式为:

                                        no_direction=2*(先前位置的行坐标-当前位置的行坐标)+先前位置的列坐标-当前位置的列坐标

                Ⅰ.Ⅲ 遇到的问题

                        ①.将方向标志位改为no_direction后解决了后退-前进的死循环问题,但运行程序后,发现在某些特定的迷宫环境会陷入下列死循环:

                                向上-向左-向下-向前-向上-...

                          这样的迷宫环境必有一个大缺口,

                        ②.应对①出现的问题,说明缺乏长期记忆函数,即可以长期记忆移动路径的函数(尚未找到实现路径)

                        ③对②不好实现,换一种思路,在方向函数里面加上条件判断代码,判段一个点在不在堆栈内.

2.其他解答

        2.1 解答思路

                ①仍然将经过的数据存放在堆栈中,每次取堆栈末尾的数据作为当前点,不能前进,pop出堆栈.

                ②将方向判别函数使用lambda函数实现,并将下一个点对应的值改为2,这样可以表示该点已经经过,不能再次经过.

                

                

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值