この質問使用して、DFSのタイムアウト、また同じ問題に遭遇したコメントエリアを見て、それが非再帰的BFSに切り替える必要があることに気付いていない、ゲームを改善しようと、デバッグつ以上の時間が解決することができ、多くの時間を消費します。
パイソンを使用して、タイムアウトスキームは:( 5つの方向を使用してテストを介して、達成するために試みられたように、A)であることができます
1つの インポートSYS 2 クラスのソリューション: 3 DEF __init __(自己): 4 self.visited = [] 5 self.distance = sys.maxsize 6 #self.direction = [ - 1、 - 1 ]、[ - 1、0 ] 、[ - 1、1 ]、[ 0、 - 1 ]、[ 0、1 ]、[ 1、 - 1 ]、[ 1、0 ]、[ 1、1 ]] 7 self.direction = [ 1、1 ]、[ 0、1 ]、[ 1、0 ]、[ - 1、1 ]、[ 1、 - 1 ] 8 #self.direction = [ 1、1 ] [ 0、1 ]、[ 1、0 ]、[ 1、 - 1 ] 9 #self.direction = [ 1、1 ]、[ 0、1 ]、[ 1、0 ] 10 11 DEF DFS(自己、グリッド、N、I、J、距離): 12 であれば I == N- 1及びj == N- 1 : 13 self.distance =分(self.distance、距離+ 1 ) 14 リターン 15 16 もし距離> = self.distance: 17 リターン 18 19 場合 self.visited [I] [J] == 0 : 20 self.visited [I] [J] = 1 21 までの距離+ = 1 22 のために直接的に自己.direction: 23 X = I +ダイレクト[ 0 ] 24 、Y = J +ダイレクト[ 1 ] 25 であれば、X < 0またはX> = Nまたはy < 0またはy> = N: 26 続行 27 もしグリッド[X] [Y] == 1または[X] [Y] == self.visited 1 : 28が 続行 29 self.dfs(グリッド、N、X、Y、距離) 30 距離- = 1 31 self.visited [I] [J] = 0 32 33 34 shortestPathBinaryMatrix(自己、グリッドDEF:'リスト[リストの[int] ') - > INT : 35 N = LEN(グリッド) 36 であればグリッド[ 0 ] [ 0 ] == 1又はグリッド[N- 1 ] [N- 1 ] == 1 : 37 リターン - 1 38 self.visited = [ 0 ため _ におけるレンジ(N)] のため _ にレンジ(N)] 39 40 self.dfs(グリッド、N、0、0、0 ) 41 リターンself.distance 場合 self.distance <sys.maxsize 他 - 1
最初なのでそれがあること。