深度优先搜索解决一笔画完
1.游戏介绍
该游戏类似于寻找汉密尔顿路径,也就是给定方格地图、起点,画出一条必须经过所有格子但是只经过每个格子一次的路径。如下图,橙色猫为起点,需遍历图中所有格子:
2.思路分析
处理可分为三大块:录入初始状态,寻找路径,展示结果。
录入初始状态
由于只是作为练习,所以录入初始状态部分我并没有用更高级的库,只是单纯地输入地图为几乘几的网格,哪些位置的网格不是图中可行走的格子,以及起点的位置。
同时经多次观察,地图大小只有两种,缺失的网格数目也是固定的,这样就更方便我们对地图初始状态信息的输入。
寻找路径
采用深度优先搜索,简单说一下就是在每个格子递归上下左右的状态为1的格子(即可行走的格子),由于地图也不大,暴力搜索的方式也比较快。注意记得回溯!
展示结果
一开始输出的是上下左右的指令,对照起来做会比较麻烦。我采用了turtle库,调整了较慢的画图速度,这样就能跟上图中画笔同步解决这个小游戏了!
4.代码实现
第一次python实现,代码有点难看,纯属娱乐~
(用了turtle库,若要运行大家记得先pip了)
// An highlighted block
import time
import turtle
def DFS(x,y):
global count
global n
global m
global g
global an
global num
g[x][y] = 0
count=count+1
if (count == n*m-num):
return
if (x+1 < n):
if (g[x+1][y]==1):
an = an + '下'
DFS(x+1,y)
if (count < n*m-num):
count = count -1
g[x+1][y] = 1
an = an[:-1