ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第24题:一马当先

2022-02-03 15:58:52  阅读:163  来源: 互联网

标签:24 一马当先 top newX inq step newY range


题目描述:
下过象棋的人都知道,马只能走’日’字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘, 棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出-1. 如n=1,m=2,则至少需要1步;若n=1,m=3,则输出-1。

示例:
输入:
n = 1 m = 2

输出:
1

思路:广度优先遍历,和走迷宫题目类似,不过这里每步有8种走法。

step = [[0 for x in range(m + 1)] for y in range(n + 1)]  # 到该点所走步数
step[0][0] = 0  # 起点
dx = [1, -1, 1, -1, 2, -2, 2, -2]
dy = [2, -2, -2, 2, 1, -1, -1, 1]
inq = [[0 for x in range(m + 1)] for y in range(n + 1)]  # 入队标记
Q = []
Q.append([0, 0])


def judge(x, y):
    if x < 0 or x > n or y < 0 or y > m:
        return False
    if inq[x][y]:  # 已经入过队
        return False
    else:
        return True


while (Q):
    top = Q[0]  # 取出队首元素
    del Q[0]  # 队首元素出队
    if top[0] == n and top[1] == m:  # 到达右上角
        break
    for i in range(8):
        newX = top[0] + dx[i]
        newY = top[1] + dy[i]
        if judge(newX, newY):
            step[newX][newY] = step[top[0]][top[1]] + 1
            inq[newX][newY] = 1
            Q.append([newX, newY])
if step[n][m]:
    print(step[n][m])
else:
    print(-1)

标签:24,一马当先,top,newX,inq,step,newY,range
来源: https://blog.csdn.net/zxc0074869/article/details/122776428

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有