转载请附:https://blog.csdn.net/weixin_43402353/article/details/111499456
算法实验报告3——跳马问题
一丶跳马问题
在n×m棋盘上有一中国象棋中的马:
- 马走日字;
- 马只能往右走。
请你找出一条可行路径,使得马可以从棋盘的左下角(1,1)走到右上角(n,m)。
输入:9 5
输出:(1,1)->(3,2)->(5,1)->(6,3)->(7,1)->(8,3)->(9,5)
二丶运行结果
三丶试题代码
#项目简介:
#作 者:key
#开发时间:2020/12/21 20:07
#初始化
m=10
n=10
chess = [[0]*m for i in range(n)]
#定义“马”的跳法
move = [(1,2),(2,1),(-1,-2),(-2,-1)]
#定义起点和终点
start = (1,1)
end = (9,5)
#初始化最优路径
rightway = {}
#初始化探索列表(从终点开始)
trylist = [end]
#第一次探索开始
p1 = trylist.pop(0)
# 主程序循环
while p1 != start:
for d in move:
p2 = (p1[0] + d[0] , p1[1] + d[1])
if 0 <= p2[0] < m and 0 <= p2[1] < n and chess[p2[0]][p2[1]] == 0 and p2 not in rightway:
chess[p2[0]][p2[1]] = 1
trylist.append(p2)
rightway[p2] = p1
try:
p1 = trylist.pop(0)
except:
print('No solution!')
else:
# 到达起点后,从起点开始回溯整个路径
print('最短路径之一')
print(start, end='')
p = start
while p != end:
p = rightway[p]
print('->', end='')
print(p, end='')