jerryxjr1220 发表于 2017-1-1 20:32:44

python小练习(055):回溯法(深度优先搜索)与探索法(广度优先搜索)求解迷宫问题

本帖最后由 jerryxjr1220 于 2017-2-7 11:26 编辑

之前已经有好多帖子讨论过“迷宫问题”了,解法也各有千秋。

今天闲来无事又琢磨了一种“字典+递归的回溯算法”(深度优先搜索算法),供大家参考。

解题思路:
利用字典把所有可能的路径列出来,利用递归算法逐层从字典中把路径找出来。

其他的看注解吧,写得很详细了。

举例:
迷宫为:(0为墙,1为路,起始(0,0),终点(3,5))
maze = [
#start (0,0)
,
,
,
,#End (3,5)
,
,
]

程序输出:(正确路径用“8”标记出来了)
Done!
The right way marked "8"!









源代码:
**** Hidden Message *****

另外一种探索解法(广度优先搜索算法):
**** Hidden Message *****

jerryxjr1220 发表于 2017-1-1 20:38:01

只要有合适的解法,像这种复杂的迷宫问题,对计算机来说,也是小case,要人眼来看几乎是不可能完成的任务。
http://xxx.fishc.com/forum/201611/09/110937d8g80xxxjkyggljc.png

PatrickTse 发表于 2017-1-1 21:37:02

可以可以,楼主好厉害

念桥红药 发表于 2017-1-2 16:50:49

学习学习,谢谢!

panda小正太 发表于 2017-1-30 18:22:23

学习下!!!嘻嘻~

Jonin616 发表于 2017-3-2 17:35:16

#回溯加递归
maze = [
,
,
,
,
,
,
]

move = [(1,0),(-1,0),(0,1),(0,-1)]
way = {(0,0):(-1,-1)}
cpos =
final =
   
def Stra(cpos):
    for each in move:
      x = cpos + each
      y = cpos + each
      if 0 <= x <= 6 and 0 <= y <= 5 and (x,y) not in way:
            if maze == 1:
                if final == :
                  return 1
                else:
                  maze = 8
                  way[(x,y)] = (cpos,cpos)
            else:
                continue
      else:
            continue
      if Stra() == 1:
            return 1
      else:
            continue
    maze]] = 1
    way.pop((cpos,cpos))
    return 0

def main():
    if Stra(cpos) == 1:
      maze = 8
      for each in maze:
            print(each)
main()

jerryxjr1220 发表于 2017-3-2 20:11:13

Jonin616 发表于 2017-3-2 17:35


这题会解了那就来做做“欧拉计划的81~83题”吧,同样的最优路径搜索问题,应该也可以解了。
81、82题可以用动态规划,83题DFS或者BFS{:5_109:}
http://bbs.fishc.com/thread-74713-1-3.html

Jonin616 发表于 2017-3-5 17:57:53

jerryxjr1220 发表于 2017-3-2 20:11
这题会解了那就来做做“欧拉计划的81~83题”吧,同样的最优路径搜索问题,应该也可以解了。
81、82题可 ...

81跟82已经做出来了 还差83

Jonin616 发表于 2017-3-5 17:58:45

jerryxjr1220 发表于 2017-3-2 20:11
这题会解了那就来做做“欧拉计划的81~83题”吧,同样的最优路径搜索问题,应该也可以解了。
81、82题可 ...

我觉得欧拉计划里面倒是很多有关数论的题目真的挺头大的 数学知识差不多都忘关了

过去吧 发表于 2017-3-5 18:43:26

学习

jerryxjr1220 发表于 2017-3-5 20:41:48

Jonin616 发表于 2017-3-5 17:58
我觉得欧拉计划里面倒是很多有关数论的题目真的挺头大的 数学知识差不多都忘关了

{:5_106:}
欧拉计划本来就是偏数学理论和算法的题目,其实和python没多大关系,很多解题者用的也根本不是python语言,只是python比较容易使用,所以比较受欢迎而已。
81和82是动态规划算法,用时都很短(<0.5 sec),83题才是搜索算法,不过如果你理解了上述的算法也挺简单的。

Jonin616 发表于 2017-3-8 20:58:01

jerryxjr1220 发表于 2017-3-5 20:41
欧拉计划本来就是偏数学理论和算法的题目,其实和python没多大关系,很多解题者用的也根本不 ...

最近除了在学数据结构与算法之外还在考虑应该学python的哪个方向 因为python的生态圈太庞大了

jerryxjr1220 发表于 2017-3-8 21:00:58

Jonin616 发表于 2017-3-8 20:58
最近除了在学数据结构与算法之外还在考虑应该学python的哪个方向 因为python的生态圈太庞大了

看你的兴趣是什么了,python无所不能{:10_256:}

Jonin616 发表于 2017-3-8 22:34:48

jerryxjr1220 发表于 2017-3-8 21:00
看你的兴趣是什么了,python无所不能

主要是不懂要哪个方向 之前是学了linux 和MySQL 因为python在运维方面用得挺多才来学Python的,现在想往web开发方向学习 你知道需要掌握哪些东西么

jerryxjr1220 发表于 2017-3-9 09:14:55

Jonin616 发表于 2017-3-8 22:34
主要是不懂要哪个方向 之前是学了linux 和MySQL 因为python在运维方面用得挺多才来学Python的,现在想往w ...

web开发的话,Django、Flask、数据库、selenium这些都需要的,其实做web最关键还是要把java学好{:5_109:}

Jonin616 发表于 2017-3-9 10:26:00

jerryxjr1220 发表于 2017-3-9 09:14
web开发的话,Django、Flask、数据库、selenium这些都需要的,其实做web最关键还是要把java学好

web开发一定要触及到Java么? s话实话对java实在不感兴趣

jerryxjr1220 发表于 2017-3-9 11:23:12

Jonin616 发表于 2017-3-9 10:26
web开发一定要触及到Java么? s话实话对java实在不感兴趣

但是做一个稍微能看的web,你肯定绕不开javascript的呀,除非你自己搞个其他脚本语言,还要能被广大互联网用户普遍接受的,因为客户端的解析器(浏览器)不在你这边,这是不受你控制的{:5_109:}

qpwoeiruyt 发表于 2017-4-15 15:54:53

不错学习了

gweuro 发表于 2017-5-18 20:31:22

学习一下~

WelanceLee 发表于 2017-6-13 14:53:32

本帖最后由 WelanceLee 于 2017-6-13 14:54 编辑


# start = (0, 0)
# end = (3, 5)

maze = [
,
,
,
,
,
,
]

c = [*6 for i in range(7)]
moves = [(1, 0), (0, 1), (-1, 0), (0, -1)]
s = [(0, 0)]
c = 1
a = {}
while True:
    location = s.pop(0)
    if location == (3, 5):
      break
    for m in moves:
      x = location + m
      y = location + m
      if -1< x < 7 and -1 < y < 6 and maze == 1 and c == 0:
            c = 1
            s.append((x, y))
            a[(x, y)] = m

location = (3, 5)
l =
while location != (0, 0):
    x = location - a
    y = location - a
    location = (x, y)
    l.insert(0, location)

print(l)
页: [1] 2 3
查看完整版本: python小练习(055):回溯法(深度优先搜索)与探索法(广度优先搜索)求解迷宫问题