Dijkstra求最短路徑

2021-07-25 11:40:20 字數 2308 閱讀 8085

把m1.txt與可執行檔案放在統一路徑下

m1.txt(距離矩陣,9行9列)的資料如下:

9999    6   3   1   9999    9999    9999    9999    9999    

9999 9999 9999 9999 1 9999 9999 9999 9999

9999 2 9999 2 9999 9999 9999 9999 9999

9999 9999 9999 9999 9999 10 9999 9999 9999

9999 9999 9999 6 9999 4 3 6 9999

9999 9999 9999 9999 10 9999 2 9999 9999

9999 9999 9999 9999 9999 9999 9999 4 9999

9999 9999 9999 9999 9999 9999 9999 9999 9999

9999 9999 9999 9999 2 9999 9999 3 9999

程式如下:

#include 

#include

using

namespace

std;

#define max_node 100

#define max_int 9999

int n1, n2; // 分別表示矩陣的行和列

int main(int argc, char* argv); // 記錄當前路徑長度

int pt[max_node] = ; // 記錄當前路徑是否是最短路徑,1表示是

for(int i = 1; i < max_node; i++)

cout

<< "read data"

<< endl;

m = readtxttoarraywithoutknowroworcolumn("m1.txt");

cout

<< "行數: "

<< n1 << ", 列數: "

<< n2 << endl;

printarray(m, n1, n2);

cout

<< "用dijkstra演算法求最短路徑:"

<< endl;

p[0] = 0; // v1到v1的路徑為0

pt[0] = 1; // 當前v1到v1的路徑是最短路徑

for(int i = 0; i < n1 - 1; i++) }}

}}

}int tmp = max_int;

for(int j = 1; j < n1; j++)}}

for(int j = 1; j < n1; j++)}}

}cout

<< "第1個節點到其他各個節點的最短路徑如下:"

<< endl;

for(int i = 0; i < n1; i++)

cout

<< endl;

return0;}

int** readtxttoarraywithoutknowroworcolumn(const

char* strpath)

int ntmp = 0;

n1 = 0;

n2 = 0;

ifstream is(strpath);

if(!is)else

j = 0;

// cout << endl; // 一行之後輸出乙個回車符

}}while(isspace((int)p) && is.get(p));

if(!is)

break;

ntmp++; // 統計列數

is.putback(p); // 如果前面讀入的不是空格或者回車符,則把剛才讀入的字元返回檔案流

is >> num;

// cout << num << "\t";

a[n1][j++] = num;

}

}is.close();

return a;

}void printarray(int** a, int m, int n)

cout

<< endl;

}}

求最短路徑(dijkstra)

因為要做一道題牽扯到最小路徑的演算法,所以就看了看締結斯特拉演算法。看了演算法導論上面的介紹不明白,只好下了乙個 自己去看。單源圖最短路徑求法 int dijkstra int from,int to int map n s u 1 for i 0 i 看了之後自己總結的一點點的經驗 締結斯特拉演算...

Dijkstra演算法求最短路徑

參考文獻 dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用open,close表方式,drew為了和下面要介紹的 a 演算法和 d 演算法表述一致,這裡均採用open,close表的方式。大概過程 建立兩個表,open,close。open表儲存所有已生成而未考察的節點,...

Dijkstra演算法求最短路徑

dijkstra演算法用來求最短距離 已經實現了 那麼最短路徑 如何求解並列印出來呢?此處的方法是記錄路徑中結點的前驅 if v未被訪問 以u為中介點可以使起點s到頂點v的最短距離d v 更優 程式具體實現,鄰接矩陣版 n為頂點數,maxv為最大頂點數 int n,g maxv maxv 起點到達各...