2016-03-28 19 views
2

N-Queensパズルのすべての解決策を探しています。私は各列にシングルクイーンを印刷しなければならず、同じ列に1人以上のクイーンがなく、同じ列に1人以上のクイーンがいないように、2人のクイーンは互いに隣接していてはいけません。N-Queensパズルの可能な解決策を見つけることができません

私はアルゴリズムを書いており、そのほとんどが正しいと思っていますが、解決策は印刷されません。なぜか分からない。私はこれに多くの時間を費やしてきました。

ご協力いただければ幸いです。続き は私のコードです:

public class NQueens { 

    int[] x; 

    public NQueens(int n) { 
     x = new int[n]; 
    } // CONSTRUCTOR 

    public void printQueens(int[] x) { 
     int N = x.length; 
     for (int i = 0; i < N; i++) { 
      for (int j = 0; j < N; j++) { 
       if (x[i] == j) { 
        System.out.print("Q "); 
       } else { 
        System.out.print("* "); 
       } 
      } 
      System.out.println(); 
     } 
     System.out.println(); 
    } 

    //Promising method 
    public boolean canPlaceQueen(int r, int c) { 

     for (int i = 0; i < r; i++) { 
      if (x[i] == c || (i - r) == (x[i] - c) ||(i - r) == (c - x[i])) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
    //permute method 
    public void placeNqueens(int r, int n) { 

     for (int c = 0; c < n; c++) { 
      if (canPlaceQueen(r, c)) { 
       x[r] = c; 
       if (validSol(r,n)) { 
        printQueens(x); 
       } else { 
        placeNqueens(r + 1, n); 
       } 
      } 
     } 
    } 

    public boolean validSol(int r, int n){ 
     if(r== n) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

    public void callplaceNqueens() { 
     placeNqueens(0, x.length); 
    } 

    public static void main(String args[]) { 
     NQueens Q = new NQueens(8); 
     Q.callplaceNqueens(); 

    } 
} 
+0

印刷できませんか?または* *を見つけることができませんか? – EJP

答えて

2

あなたのコードは正常に見えます。 validSolメソッドのキーチェックが欠けているだけです。 validSoldメソッドを次のように変更して、コードが正常に動作するはずです。

public boolean validSol(int r, int n){ 
     if(r== n-1) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 

これがうまくいけば教えてください。

+1

ありがとうございました.. –

関連する問題