(Java)の問題を注ぎます

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 }

 

おすすめ

転載: www.cnblogs.com/AntonLiu/p/11391973.html