在接受采访时,我遇到了一个我理解但却无法理解如何获得解决方案的问题。
假设您有这个板(在这种情况下矩阵有4行和3列,但它可以是N行和M列长)
A[0][0] = 0 A[0][1] = 0 A[0][2] = 0
A[1][0] = 0 A[1][1] = 0 A[1][2] = 1
A[2][0] = 1 A[2][1] = 0 A[2][2] = 0
A[3][0] = 0 A[3][1] = 0 A[3][2] = 0
你如何计算骑士从左上方到右下方的最小转弯数?
0表示该特定正方形上没有任何一块,而1表示正方形上有一块。
在这种情况下,骑士需要7圈才能移动到右下方:
in the first turn the knight moves from square (0, 0) to square (2, 1);
in the second turn the knight moves from square (2, 1) to square (0, 2);
in the third turn the knight moves from square (0, 2) to square (1, 0);
in the fourth turn the knight moves from square (1, 0) to square (2, 2);
in the fifth turn the knight moves from square (2, 2) to square (3, 0);
in the sixth turn the knight moves from square (3, 0) to square (1, 1);
in the seventh turn the knight moves from square (1, 1) to square (3,4).
最好的情况显然是3,但那些方格(A [1] [2]和A [2] [0])被封锁。
实施此操作的最佳方法是什么?我在网上看过BFS会这么做,但我不知道在哪里开始编写这个Python。提前致谢。
以下是该功能的外观:
def shortest_path(matrix):
#passing in [[0, 0, 0], [0, 0, 1], [1, 0, 0], [0, 0, 0]]
答案 0 :(得分:0)
将棋盘上的每个未占用的方块视为图形中的节点,边缘连接一个骑士可以在一个转弯中移动的方格。然后,您可以使用您选择的搜索算法在此图中找到最短路径。