Dijkstra演算法的實現

2021-07-02 23:54:50 字數 2312 閱讀 1517

//dijkstra演算法的實現

//讀入「dijkstratxt」中的部分網路資料「test.txt」(弧段起點id,弧段終點id,弧段距離)

//用dijkstra演算法生成的最佳路徑再寫入「routetxt.txt」檔案中

#include #include #include #include using namespace std;

#define maximum 1000000000 //無窮大

typedef struct recordlist

record; //定義record結構體型別表示從檔案中讀取的資料記錄

void main()

outputfile << "\tdijkstra 演算法實現結果資料\t" << endl;

outputfile << "起點\t終點\t距離\t\t路徑" << endl;

int numpoint; //點數

int numedge; //邊數

int maxpoint; //最大點號

record *head = null; //資料鏈表表頭

record *data = null; //讀取的一行資料

data = (record *)new record; //分配一行資料的記憶體空間

//讀取一行資料,包括起點、終點、弧段長度

inputfile >> data->startpoint >> data->endpoint >> data->length;

head = data; //資料鏈表表頭指標

numedge = 1; //初始邊數為1

maxpoint = max(data->startpoint, data->endpoint); //初始最大點號

while (!inputfile.eof()) //逐行讀取檔案中的資料到data中

inputfile.close(); //關閉檔案流

data->next = null; //最後的指標賦值為空

/// 以上**實現從檔案讀入資料,以下實現演算法計算並寫入結果到檔案

int i, j, k; //變數

float *path = new float[maxpoint + 1]; //路徑距離陣列

int *route = new int[maxpoint + 1]; //路由表

bool *flag = new bool[maxpoint + 1]; //最短路徑求取成功標記

for (i = 0; i <= maxpoint; i++) //按點號從小到大遍歷所有結點做源結點

record *getdata = head; //獲得鍊錶資料頭指標

float minlength = maximum; //當前的最小距離

int lastpoint = i; //前一次找出的距離最短的路徑的終點

while (getdata != null) //遍歷鍊錶,找出源結點出發的最短路徑

}getdata = getdata->next; //指向下乙個結構體

}flag[lastpoint] = true; //標記起點到當前終點的最短路徑已求出

for (k = 0; k < maxpoint; k++) //按點號從小到大遍歷所有結點做目的結點

}getdata = getdata->next; //指向下乙個結構體

}for (j = 0; j < maxpoint; j++)

}lastpoint = temppoint; //獲得當前最小距離的終點

minlength = templength; //獲得當前最小距離

flag[lastpoint] = true; //標記起點到當前終點的最短路徑已求出

}/// 下面先指定檔案寫入結果資料

for (j = 0; j <= maxpoint; j++) //從每乙個結點出發

else

//向檔案寫入資料 「起點 終點 距離 路徑」

outputfile << i << "\t" << j << "\t" << path[j] << "\t\t" << i << strroute << "->" <<  j << endl;}}

}outputfile.close(); //關閉檔案流

return;

}

Dijkstra演算法的實現

最近自學了dijkstra演算法,跟著自己的理解寫了個 想加深對dijkstra演算法的理解,如有不足,還請多多指教。首先,dijkstra演算法主要是適用於找兩點之間的最小權值之和。思路 開始的時候,假設有兩個集合 分別為a,b集合 a集合為空 用來存放使用過的點 b集合存放著圖中的各點 當然,在...

dijkstra演算法實現

include include using namespace std const int maxnum 100 const int maxint 999999 各陣列都從下標1開始 int dist maxnum 表示當前點到源點的最短路徑長度 int prev maxnum 記錄當前點的前乙個結...

Dijkstra演算法java實現

看到網上的dijkstra演算法寫的都好複雜,我自己就簡單的寫了乙個,例子為書上的例子。public class dijkstra 存放的為頂點所在陣列的id和頂點名稱 mapv new hashmap 不存放源點 v0 v.put 1,v1 v.put 2,v2 v.put 3,v3 v.put ...