算法实验报告3——跳马问题——2020.12.21

转载请附:https://blog.csdn.net/weixin_43402353/article/details/111499456

一丶跳马问题

在n×m棋盘上有一中国象棋中的马:

  1. 马走日字;
  2. 马只能往右走。
    请你找出一条可行路径,使得马可以从棋盘的左下角(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='')
——黄鹤之飞尚不得过,猿猱欲度愁攀援——
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blockchain_KT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值