Find the length of the shortest path for a knight to travel from the source point to the destination point in a chessboard. Return -1 if no path can be found.
Example
I: board = # 0 is open 1 is blocked
[[0,0,0],
[0,0,0],
[0,0,0]]
source = [2, 0]
destination = [2, 2]
O: 2 because (2, 0) -> (0, 1) -> (2, 2)
I: board =
[[0,1,0],
[0,0,1],
[0,0,0]]
source = [2, 0] destination = [2, 2]
Output: -1 because no possible path
Analysis
A simple bidirectional graph where the vertex is the position and the edge is a possible knight move from one position to another position. Searching for length on a simple graph is just BFS. A check in pre visit has to determine the next position is in-bound and open.
Code
Code
CPython default hash function for custom class is its memory address. You have to write a custom hash to dedup the equivalent values.