2杯、3杯の容量5があり、他の4のボリュームの容量は、水を注ぐ方法です。
カップ、またはダウンライトに水を充填することができ、又は水のカップは、他のカップに加えました。
1つの インポートjava.util.ArrayListの。 2 インポートjava.util.Collections。 3 輸入java.util.LinkedList; 4 インポートjava.util.Queue。 5 6 インポート 静的java.lang.Integer.min。 7 8 パブリック クラスWaterPuzzle { 9 10 民間 のint []プレ。 11 プライベート int型エンド。 12 13 パブリックWaterPuzzle(){ 14個の ブール []訪問= 新しい ブール [100 ]。 15 前= 新しい int型 [100 ]; 16 端= -1 。 17 // BFS 18 キュー<整数>キュー= 新しい LinkedListの<> (); 19 queue.add(0 )。 図20は、 訪問[0] = 真。 21 ながら(!queue.isEmpty()){ 22 INT CUR = queue.remove()。 23 INT A = CUR / 10 。 24 INT B = CUR%10 。 25 26 のArrayList <整数> nexts =新しいのArrayList <> (); 27 nexts.add(5 * 10 + B)。 28 nexts.add(* 10 + 3 )。 29 nexts.add(* 10 + 0 )。 30 nexts.add(0 * 10 + B)。 31 32 INT =分(3 - B、A)。 33 nexts.add(( - IN)* 10 + B + IN)。 34 IN =分(5 - 、B)。 35 nexts.add((+ IN)* 10 + B - IN)。 36 37 のために(INT 次:nexts){ 38 もし(!訪問[次]){ 39 [次] =訪れ真。 40 queue.add(次) 41 プレ[次] = CUR。 42 であれば(次/ 10 == 4 ||次%10 == 4 ){ 43 端= 次回。 44 リターン; 45 } 46 } 47 } 48 } 49 } 50 51 公共のIterable <整数> 結果(){ 52 ArrayListの<整数> ANS = 新しい ArrayListを<> (); 53 であれば(端== -1 ) 54の リターンANS。 55 int型 P = END; 56 一方、(P!= 0 ){ 57 ans.add(P)。 58 、P = プレ[P]。 59 } 60 ans.add(0 )。 61 Collections.reverse(ANS)。 62の リターンANS; 63 } 64 65 公共 静的 ボイドメイン(文字列[]引数){ 66 のSystem.out.println(新しいWaterPuzzle()結果()。)。 67 } 68 }