1

私の質問はかなり単純です。

アルゴリズム「Astar」(ヒューリスティック関数を使用して次にアクセスする状態を計算する検索アルゴリズム)を実行していると仮定します。

更新をグリッドで表示したい(8パズルの問題に適用します)。どうすればいいですか?変更をはっきりと表示したいのですが、私の経験ではGrid[6].showValue(newValue)、GUIのようなことをすると、「スタンバイ」になります。

これはマルチスレッドで実行できると確信していますが(多分?)、もっと簡単な方法はありますか?

そして、可能であればもう1つの非常に簡単な質問です。Java(私のIDEはNetbeans)に、BFS、DFS、Aスターなどの検索メソッドを含むクラスがあるのでしょうか。もしそうなら、アルゴリズムのコードへのリンクを提供していただけませんか(コードのベースとして使用する必要があります。直接含めることはできません。大学の課題です)。Javaはオープンソース言語なので、このコードは簡単に見つけられると思います。私が間違っている?

どうもありがとうございます

4

2 に答える 2

3

GUI スレッドで処理を行わないでください。

について話している場合、それはイベント ディスパッチ スレッドです。Concurrency in Swingのチュートリアルで説明されているように、ワーカー スレッドを使用します。

于 2012-03-26T18:39:35.847 に答える
1

MДΓΓ БДLL が提案したように、別のスレッドで処理を行う必要があります。Runnable基本的に、スレッド内で実行できるようにクラスを「マーク」するを実装するクラスに、検索関連のコードを実装する必要があります。

これを行うには、次を使用できますSwingWorker

SwingWorker<Integer[], Void> worker = new SwingWorker<Integer[], Void>() {
    public Integer[] doInBackground() {
        //do the computation here. This will be executed in a different thread; 
        //thus allowing the event dispatch thread (=GUI thread) to ensure responsiveness of the UI.
        //NEVER update your GUI here since this could cause strange errors that are sometimes hard to track down.
    }
    public void done() {
        try {
            Integer[] result = get(); //this is executed in the GUI thread after 
            //execution if the doInBackground method finished and fetches the result of 
            //that method. You should update your GUI here.
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        } catch (ExecutionException ex) {
            ex.printStackTrace();
        }
   }
}

2 番目の回答: 特に BFS、DFS、A-Star を使用しているツリーにはあらゆる種類のデータが含まれている可能性があるため、さまざまなデータ型に使用できるような一般的な方法でアルゴリズムを実装するのはかなり困難です。教科書または講義ノードの疑似コードでアルゴリズムを見つける必要があると思います。そうでない場合は、どこかで調べて、自分で実装してみてください。

于 2012-03-26T20:14:25.397 に答える