鱼C论坛

 找回密码
 立即注册
查看: 16352|回复: 117

[技术交流] python小练习(068):回溯法(深度优先搜索)30行代码求解“马踏棋盘”问题

[复制链接]
发表于 2017-2-7 10:38:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
昨天正好看到一位鱼油在关注之前的python小练习(012):马的“日”字型走法问题。

那么今天我们再来做个小练习,用python求解“马踏棋盘”问题。

“马踏棋盘”是非常典型的“深度优先搜索”的应用,在小甲鱼老师的C语言教学视频中也是作为例子讲解过,但是python作为最简洁的编程语言,只需要30多行代码就能解决这个问题。

“马踏棋盘”问题:
在8x8的国际象棋棋盘上,一个“马”从任意位置出发,不重复地走完所有64个格子。求解遍历路径。

mtqp.png

源代码:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-7 15:46:27 | 显示全部楼层
学习了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 15:50:43 | 显示全部楼层
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
=== RESTART: C:/Users/Administrator/Desktop/一个“马”从任意位置出发,不重复地走完所有64个格子.py ===
请输入从哪个位置开始:例如“0,0”
“0,0”
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/一个“马”从任意位置出发,不重复地走完所有64个格子.py", line 52, in <module>
    main()
  File "C:/Users/Administrator/Desktop/一个“马”从任意位置出发,不重复地走完所有64个格子.py", line 45, in main
    x,y = int(x),int(y)
ValueError: invalid literal for int() with base 10: '“0'

报出了异常,为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 17:00:02 | 显示全部楼层
diaodiaodiao
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-7 17:28:59 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-2-7 15:50
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type ...

你输入的时候,不用打引号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 21:52:24 | 显示全部楼层
jerryxjr1220 发表于 2017-2-7 17:28
你输入的时候,不用打引号

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 21:54:04 | 显示全部楼层
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
RESTART: C:\Users\Administrator\Desktop\Python 代码、视频\代码\失败的一个“马”从任意位置出发,不重复地走完所有64个格子.py
请输入从哪个位置开始:例如“0,0”
0,0

没有反应
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-7 21:54:36 | 显示全部楼层
我用的是 3.6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-8 07:11:41 From FishC Mobile | 显示全部楼层
新手·ing 发表于 2017-2-7 21:54
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
Type ...

运行时间大概需要20-30秒左右,根据你的机器性能而定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 09:08:02 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 11:18:37 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 13:17:57 | 显示全部楼层
学习了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 14:34:53 | 显示全部楼层
jerryxjr1220 发表于 2017-2-8 07:11
运行时间大概需要20-30秒左右,根据你的机器性能而定。

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 03:00:21 | 显示全部楼层
请教下 像这种深度优先算法,使用递归实现会比不使用递归效率高非常非常多吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 09:49:07 From FishC Mobile | 显示全部楼层
Jonin616 发表于 2017-2-9 03:00
请教下 像这种深度优先算法,使用递归实现会比不使用递归效率高非常非常多吗?

深度优先搜索一般都是用的回溯法,回溯法必然会用递归,写循环迭代的话代码会非常长,而且可读性很差。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 14:55:25 | 显示全部楼层
很想学习一下。不知道这代码如何写~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 15:39:56 | 显示全部楼层
jerryxjr1220 发表于 2017-2-9 09:49
深度优先搜索一般都是用的回溯法,回溯法必然会用递归,写循环迭代的话代码会非常长,而且可读性很差。

那在这类问题上面 使用递归会比非递归来得效率更高吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 15:42:34 | 显示全部楼层
Jonin616 发表于 2017-2-9 15:39
那在这类问题上面 使用递归会比非递归来得效率更高吗

不能说效率高,一般递归的效率都不太高,但是一般回溯法都是用递归写的,代码简洁,可读性强。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 17:14:23 | 显示全部楼层
jerryxjr1220 发表于 2017-2-9 15:42
不能说效率高,一般递归的效率都不太高,但是一般回溯法都是用递归写的,代码简洁,可读性强。

有机会能写一个非递归版本么? 我按照我们之前交流的时候写过的代码修改了一下 结果效率非常之低,算了一晚上都没算出来 程序上我是实在看不出哪边有错误,很无奈很苦恼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-9 17:17:45 | 显示全部楼层
jerryxjr1220 发表于 2017-2-9 15:42
不能说效率高,一般递归的效率都不太高,但是一般回溯法都是用递归写的,代码简洁,可读性强。

就是因为前面说的原因,所以我想是不是因为我写的是非递归实现,才会效率如此低下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表