深度优先搜索解决一笔画完

这篇博客介绍了如何使用深度优先搜索算法解决一笔画完的游戏。游戏目标是从起点出发,遍历所有格子且每个格子只经过一次。文章详细分析了思路,包括录入初始状态、寻找路径和展示结果三个步骤,并提供了Python代码实现,利用turtle库以可视化的形式展示了搜索过程。
摘要由CSDN通过智能技术生成

深度优先搜索解决一笔画完

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
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值