2011-04-11 17 views
0

Javaに組み込まれたプライオリティキューを使用してグラフの読み込みとソートを行うと、各繰り返しで最小エッジが削除されます。Javaプライオリティキュー

+2

SOの通常の手順は、試したことを示し、わからないことについて特定の質問をすることです。これまでに行ったことを示すコードを投稿してみてください。さもなければ、あなたはdownvotesを得て、質問は "本当の質問ではない"として閉じられるかもしれません。 –

答えて

0

まず、プライオリティキューのためのコンパレータを作成します。

class MinHeapComparator implements Comparator<Integer> { 
    @Override 
    public int compare(Integer one, Integer two) { 
    return mDistances[one] - mDistances[two];//... 
    } 
    } 

これは私が書いた最短経路アルゴリズムからです。 mDistancesは、ソースから頂点までの距離です。コンパレータを変更して、好きなように比較することができます。

コンパレータのドキュメントから:「順序の2つの引数を比較します。最初の引数が2番目の引数よりも小さい、負の整数または正の整数を返します。ここ

完全なドキュメント:http://download.oracle.com/javase/1.5.0/docs/api/java/util/Comparator.html

第二に、プライオリティキューにアイテムを追加します。私は通常、頂点オブジェクトを含む配列を持つグラフを作成します。各オブジェクトは、隣接する頂点のリストを含んでいます。だから、私の場合は、インデックスを優先度キューに追加して頂点を表現するだけです。コンパレータには、頂点に関係なく何でも行うロジックを含めることができます。 PriorityQueue.add()はアイテムを追加します。

第三に、コンパレータでプライオリティキューをインスタンス化:

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(numberItems, new MinHeapComparator()); 

第四に、ヒープ上の最上位項目を抽出するためにPriorityQueue.poll()を呼び出します。コンパレータは、ヒープの先頭にあるアイテムを特定するために使用されます。

+0

ありがとうございます。また、優先度キューに項目を追加してから、それらを比較して最小エッジを削除するforループを実行できますか? – kachilous

+0

エッジウェイトを比較するようにコンパレータを設定した場合、ループ内でpoll()メソッドを呼び出すと、各繰り返しで最小エッジが削除されます。どのアルゴリズムを実装していますか?グラフの最小スパニングツリー? –

+0

はい私は最終的にmstを見つける必要がありますまた、私は別のセットのデータ構造を使用する必要があります – kachilous

関連する問題