輸入java.util.Deque。 輸入java.util.LinkedList; クラスノード{ int型のX。 int型のyを。 } クラスソリューション{ プライベート INT DIR [] [] = 新しい INT [] [] {{0、-1}、{ - 1,0}、{0,1}、{1,0 }}。 プライベートノードparentx [] []; プライベート int型のカウント[] []; プライベート ブールは、[] []を使用しました。 プライベートノード開始= 新しいノード(); プライベートノード終了= 新しいノード(); 民間のDeque <ノード>キュー= 新しいですLinkedListの<ノード> (); プライベートノードの一時。 プライベート ブールフラグ= 偽; パブリック ブールisCheckMove(文字列[]地図、ノード開始){ 戻り start.x> = 0 && start.x <map.length && start.y> = 0 && start.y < マップ[start.x] .LENGTH()。 } パブリック ブールprintPath(文字列[]地図){ 一方(parentx [temp.x] [temp.y] .X!= temp.x || parentx [temp.x] [temp.y] .Y!= TEMP。 Y){ System.out.printは([temp.x] .charAt(temp.y MAP) + " - "を" )。 TEMP = parentx [temp.x] [temp.y]。 System.out.println([temp.x] .charAt(temp.y)をMAP); 返す 真; } 公共 INT DFS(文字列[]地図、ノード開始){ queue.offer(スタート)。 使用[start.x] [start.y] = 真。 カウント[start.x] [start.y] = 1 。 ながら(!queue.isEmpty()){ 開始 = )(queue.pop。 以下のために(int型 i = 0; ++; iは、4 < I){ TEMP = 新しい)(ノード; temp.x = start.x + DIR [I] [0 ]。 temp.y= start.y + DIR [I] [1 ]。 もし(temp.x == end.x && temp.y == end.y){ フラグ = 真。 queue.addLast(TEMP)。 parentx [temp.x] [temp.y] = 始めます。 カウント[temp.x] [temp.y] =カウント[start.x] [start.y] +1 。 使用[temp.x] [temp.y] = 真。 破ります; } 場合(!isCheckMove(マップ、TEMP)は&& 使用[temp.x] [temp.y]){ queue.addLast(TEMP)。 parentx [temp.x] [temp.y] = 始めます。 カウント[temp.x] [temp.y] =カウント[start.x] [start.y] +1 。 使用[temp.x] [temp.y] = 真。 } } もし(フラグ){ ブレーク。 } } 戻り[temp.x] [temp.y]カウント。 } パブリック ブールNUMS(文字列マップ[]){ queue.clear()。 parentx = 新しいノード[map.length] [地図[0 ] .LENGTH()]。 カウント = 新しい INT [map.length]を[マップ[0 ] .LENGTH()]。 中古= 新しい ブール [map.length] [地図[0 ] .LENGTH()]。 用(int型 ; iがmap.lengthを<++ iが0 = {i)が ため(INT J = 0; jは<[I] .LENGTH()マップ; ++ J){ 使用[I] [J] = 偽; [i] [j]はカウント = 0 ; ノードTMP = 新しいノード()。 tmp.x = I; tmp.y = J; parentx [I] [J] = TMP。 もし(マップ[i]が.charAt(J)== '#' ){ end.x = I; end.y = J; } もし(マップ[i]が.charAt(J)== '@' ){ start.x = I。 start.y = J; } } } のSystem.out.println(DFS(マップ、開始))。 printPath(マップ) 返す 真; } } パブリック クラスまず{ 公共 静的 ボイドメイン(文字列[]引数){ 解空間 = 新しいですソリューション(); 文字列マップ[] = { "****"、 "@ ***"、 "&&&&"、 "&&&&"、 "&#**" }。 space.nums(マップ) 用(文字列str:マップ){ のSystem.out.println(STR)。 } } }