パッケージcom.main。 輸入java.util.LinkedList; パブリック クラスNOQUEUE { 公共のLinkedList <ノード> getQueue(int型N){ LinkedListの <ノード>キュー= 新しい LinkedListの<ノード> (); INT、M = 0 。 ブールのp = 真 ; // 是否需要向上回溯 ながら(M < N){ 場合(M == 0 ){ ノードQは = 新しいノード(0、0 ); queues.add(Q)。 M ++; } IF(N-> 0 ){ ノードQ = queues.getLast(); IF (P){ P = falseに ; // デフォルト見つからない ために(int型 I = 0 ; I <N-私は++ ){ ノードQ1を = 新新ノード(q.x + 1 、I); // 比較 IF(checkQueue(Q1を、キュー)){ // 次のトラックに結果を見つける queues.add(Q1)を、 メートル ++ ; P= trueに、 BREAK ; } } } 他 { // なしの結果は上向きバック見つかりません Q = queues.removeLastを(); // 最後のものが取り出し のために(INT I = q.y + 1 ; Iは、N <; Iは++ ){ ノードQL = 新しい新しいノード(QX、I); IF(checkQueue(QL、キュー)){ // 結果を見つけ、隣のトラック queues.addLast(Q1)を、 P = 真; 破ります; } } もし(!P){ M - 。 } } } } 戻りキュー。 } パブリックブールcheckQueue(ノードQ1、LinkedListの<ノード> キュー){ ブールB = 真。 もし(queues.size()== 0 ){ 戻りB。 } のために(int型 i = 0 ; iがqueues.sizeを()<; iは++します){ ノードQ =キュー。取得(I); もし(q1.x == QX || q1.y == QY || q1.xq.x == q1.yq.y || q1.xq.x == - 1 *(q1.y-のQY)) { B = 偽。 破ります; } } 戻りB。 } パブリック 静的 ボイドメイン(文字列[]引数){ NOQUEUE noq = 新しいNOQUEUE()。 INT、N = 4 。 LinkedListの <ノード> L = noq.getQueue(N)。 以下のための(のint J = 0 ; J <nであり、j ++ ){ ため(int型 I = 0 iがN <; iは++ ){ ノードノード = L。取得(I); もし(J == node.y){ システム。うちの.print(" Q " ); } 他{ システム。うちの.print(" 1 " ); } } システム。アウト.println(); } } クラスノード{ int型のX; int型のyを。 パブリックノード(int型 I、int型のJ){ この .X = I。 この .Y = J; } @Override パブリック文字列のtoString(){ // TODO自動生成方法スタブ リターン X + " " + Y。 } } }