--- 骑士周游问题 ---
在国际象棋棋盘上,一个"骑士"按照"马走日"的规则
从一个格子出发,走遍所有棋盘格恰好一次,即为一次周游
思路 (深度优先 - Depth First Search (DFS)):
1. 将合法走棋次序表示为一个图
1)将棋盘格作为顶点
2)按照"马走日"规则的走棋步骤作为边
3)建立每个棋盘格的所有合法走棋步骤,能够到达的棋盘格关系图
2. 采用图搜索算法,搜寻一个长度为 (行*列-1) 的路径,路径上包含每个顶点恰好一次
3. 如果沿单支深入搜索到无法继续时,路径长度还没达到预定值
就清除颜色标记,返回上一层,换一个分支继续深入搜索
4. 使用栈记录路径,并实施返回上一层的回溯操作
from 2.14_vertex&graph import Graph
def legal_moves(x, y, bd_size):
"""
:param x: x 坐标
:param y: y 坐标
:param bd_size: 格子数
:return: 当前格子下一步的所有合法走棋位置
"""
new_moves = []
# "马走日"的 8 个格子
direction = [(-1, -2), (-1, 2), (-2, -1), (-2, 1),
(1, -2), (1, 2), (2, -