2017-02-22 34 views
0

私は、パス探索の仕組みに関する基本的な知識を得るためのプログラムに取り組んでおり、Dijkstra's Algorithmを使って2D配列の2点間の最短距離ユーザが選択する。私は3つのメソッドを持つGraphクラスを使用しています.1つは読み取り、印刷、最短です。しかし、私が作ったプログラムのアルゴリズムをどうやって作るのか分かりません。どんな助けもありがとう!Dijkstraのアルゴリズム2つの頂点間の最短距離を求めるC++

プログラムはこれらの値を読み込み、最初の変数はsizeという変数に設定され、残りはdistanceという2次元配列に入力されます。

4 
0  1.7 0.3 0 
1.7 0  0.1 3.6 
0.3 0.1 0  0 
0  3.6 0  0 

これは私のGraph.hファイルである:以下

class Graph 
{ 
public: 
    void read(const char* filename); 
    void print(ostream& out); 
    float shortest(int v1, int v2); 
private: 
    int size; 
    float max_edge_length; 
    float distance[MAX_VERTICES][MAX_VERTICES]; 
}; 

は、読み取りおよび印刷方法を作成する上で、私のスタートです。

void Graph::read(const char* filename){ 
    int x, y; 
    ifstream myfile(filename); 

    if (myfile.good()){ 
     myfile >> size; 
     for (y = 0; y < size; y++){ 
      for (x = 0; x < size; x++){ 
       myfile >> distance[x][y]; 
      } 
     } 
    } 
} 

void Graph::print(ostream& out){ 

    out << size << endl; 
    for (int y = 0; y < size; y++){ 
     for (int x = 0; x < size; x++){ 
      out << distance[x][y] << " "; 
     } 
     out << endl; 
    } 
} 

float Graph::shortest(int v1, int v2){ 


} 
+0

によって(フロート)メモリ

あなたの缶店のグラフの費用がかかりますです。効率的なテンプレート優先キューを実装できますか?既存の標準ライブラリ部品から1つを構築できますか?あなたが一から自分自身を構築しなければならなかったらどうですか?どうやってやるの? –

+0

Dijkstraのアルゴリズム実装を提供するようお願いしていますか?これはちょっとした話題かもしれないし、たくさんのC++チュートリアル、ここに投稿する前に何の情報源をチェックして、これまで実装しようとしていることがありますか? – Zimano

答えて

0

ファイルが読み込まれた後にグラフが確実に表示され、最短がよく使用される場合は、

Floyd's Algorithmを使用できます。それはテイクはO(n^3)(nはあなたのグラフのポイント数で)一度、クエリ最短毎回使用Oを構築(1)

https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm

が、あなたのグラフのポイント数大であれば、ダイクストラ

よりも簡単です(100000のように)。 2D配列はストアグラフでは良くありません。それはあなたが(グラフの後)経路探索のために必要な第二のデータ構造は、プライオリティキューです100000 * 100000 *のはsizeof側

関連する問題