2016-11-02 24 views
-1

私は割り当てのためのJavaプログラムで作業していますが、実装にこだわっていて、助けを求める他の場所がわかりません。割り当ては、いくつかの必要なメソッドを使用して、指定された数独ボードを解決するバックトラックのJavaプログラムを作成することです:特定のメソッドを使用したJava再帰バックトラック(数独)

必要なメソッド:

•isFullSolution、部分的な解決策を受け入れ、trueを返します方法それが完全で有効な解決策である場合

rejectは、部分解を受け入れ、決して完全な解に拡張することができないため拒否する必要がある場合はtrueを返すメソッドです。

は、部分解を受け取り、追加された1つの追加選択肢を含む別の部分解を返すメソッドです。このメソッドは、ソリューションに追加する選択肢がなくなるとnullを返します。また、部分的な解決策を受け入れ、最新の選択肢を追加すべきでは別の部分的な解決策を返すメソッドがされている、という•元のオブジェクト

を変更するよりも新しい部分的な解決策を、作成してくださいする必要があります次のオプションに変更されました。このメソッドは、最後に選択されたもののオプションがもうない場合はnullを返します。

我々はまた、与えられている私たちのここ方法を解く:

static int[][] solve(int[][] board) { 
    if (reject(board)) return null; 
    if (isFullSolution(board)) return board; 
    int[][] attempt = extend(board); 
    while (attempt != null) { 
     int[][] solution = solve(attempt); 
     if (solution != null) return solution; 
     attempt = next(attempt); 
    } 
    return null; 
} 

私はこれを実装するに関連する3つの主要な質問を持っています。

私は簡単に次へを拡張し、既成のメソッドを解決に対処しなくても、この問題を解決することができます。

1.ちょうど見つけるを延長する最初の0(0の空のスペースとして使用されている)とに置き換える1。次のメソッドは、行、列、およびボックスと比較するメソッドを使用して比較することができますか?そして、たとえ私が正しいと仮定しても、Solveメソッドは決してに届きません。次のメソッドは私のテストのいずれかであり、私はそれを回避する方法がわかりません。

マイ方法拡張:方法を拡張内で明示的に私が呼ばれない限り

static int[][] extend(int[][] board) { 
    // Initialize the new partial solution 
    int[][] temp = new int[9][9]; 
    for (int i = 0; i < 9; i++) { 
    for(int j = 0; j < 9; j++){ 
     temp[i][j] = board[i][j]; 
    } 
    } 
    for (int i = 0; i < 9; i++) { 
    for(int j = 0; j < 9; j++){ 
     if(temp[i][j] == 0){ 
     temp[i][j] = 1; 
     return temp; 
     } 
    } 
    } 
    //If we reach this, can no longer extend 
    return null; 
} 

2.方法は到達しません。私はこれのために多くの異なる方法を書いており、それらのどれも異なる理由で働かない。私は行、列、およびボックスのメソッドを比較して、どの値を配置できるかチェックし、何も動作しない場合は0に設定します。、すべてのテストを通して、1のセットは決して変更されませんでした。拡張メソッド。私は正直なところ、今は非常に混乱して失われており、どんな指針も素晴らしいだろう。

3.は最後に、どのように私は私の方法を拒否するために拒否した例を知っているだろうか?私は、どんなボードを置くことができるときにスドクボードのコーナーケースの無限の量があるように感じる。

私はちょうど信じられないほど紛失し、どのように進めるべきかわからない。 Any and Allヘルプは大歓迎です。

+0

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。コードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。具体的には、これをデバッグしようとする試みを1行だけ示しておらず、あなたの(欠落している)テストケースの一般的なものです。 – Prune

答えて

関連する問題