当板上有碎片时,Pythonic计算骑士最短路径的方法

时间:2015-05-15 01:51:55

标签: python algorithm graph shortest-path minimization

在接受采访时,我遇到了一个我理解但却无法理解如何获得解决方案的问题。

假设您有这个板(在这种情况下矩阵有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]] 

1 个答案:

答案 0 :(得分:0)

将棋盘上的每个未占用的方块视为图形中的节点,边缘连接一个骑士可以在一个转弯中移动的方格。然后,您可以使用您选择的搜索算法在此图中找到最短路径。