以山东大学威海的部分建筑物为例来实现迪杰斯特拉算法
#include <iostream> #include <map> #include <string>
using namespace std;
|
map<string, int> couple; int e[20][20], dis[20], book[20], min, n, u, v, m, t1, t2, t3, infinity = 9999999; void map_init() { couple["泰园餐厅"] = 1; couple["6号楼"] = 2; couple["5号楼"] = 3; couple["体育馆"] = 4; couple["田径场"] = 5; couple["馨园餐厅"] = 6; couple["荟园餐厅"] = 7; couple["法学院"] = 8; couple["雀园餐厅"] = 9; couple["电子楼"] = 10; couple["图书馆"] = 11; couple["网络楼"] = 12; couple["数学院"] = 13; couple["教师公寓"] = 14; couple["机电院"] = 15; }
|
void create_matrix() {
for (int i = 1; i <= 15; i++) for (int j = 1; j <= 15; j++) if (i == j) e[i][j] = 0; else e[i][j] = infinity; }
void input_matrix(string a,string b) { e[1][2] = 50;e[2][1] = 50; e[1][6] = 50;e[6][1] = 50; e[2][3] = 20;e[3][2] = 20; e[3][4] = 289;e[4][3] = 289; e[4][5] = 150;e[5][4] = 150; e[7][6] = 50; e[6][7] = 50; e[7][8] = 150; e[8][7] = 150; e[8][9] = 200; e[9][8] = 200; e[9][10] = 200; e[10][9] = 200; e[10][5] = 100; e[5][10] = 100; e[10][12] = 100; e[12][10] = 100; e[10][11] = 160; e[11][10] = 160; e[11][12] = 150; e[12][11] = 150; e[11][13] = 250; e[13][11] = 250; e[12][13] = 170; e[13][12] = 170; e[8][13] = 300; e[13][8] = 300; e[8][11] = 190; e[11][8] = 190; e[12][14] = 400; e[14][12] = 400; e[13][15] = 500; e[15][13] = 500; e[14][15] = 1000; e[15][14] = 1000;
if (couple[a] > couple[b]) { int t; t = couple[a]; couple[a] = couple[b]; couple[b] = t; } for (int i = 1; i <= 15; i++) dis[i] = e[couple[a]][i];
for (int i = 1; i <= 15; i++) book[i] = 0; book[couple[a]] = 1; }
void dijkstra() { for (int i = 1; i <= 14; i++) {
min = infinity; for (int j = 1; j <= 15; j++) { if (book[j] == 0 && dis[j] < min) { min = dis[j]; u = j; } } book[u] = 1; for (v = 1; v <= 15; v++) { if (e[u][v] < infinity) { if (dis[v] > dis[u] + e[u][v]) dis[v] = dis[u] + e[u][v]; } } }
}
|
void print() { int i = 1; cout << "以图片的实例为标准,以泰园餐厅为起点" << endl << endl; cout << "到达6号楼的最短路径为" << dis[i+1] << endl << endl; cout << "到达5号楼的最短路径为" << dis[i+2] << endl << endl; cout << "到达体育馆的最短路径为" << dis[i+3] << endl << endl; cout << "到达田径场的最短路径为" << dis[i+4] << endl << endl; cout << "到达馨园餐厅的最短路径为" << dis[i+5] << endl << endl; cout << "到达荟园餐厅的最短路径为" << dis[i+6] << endl << endl; cout << "到达法学院的最短路径为" << dis[i+7] << endl << endl; cout << "到达雀园餐厅的最短路径为" << dis[i+8] << endl << endl; cout << "到达电子楼的最短路径为" << dis[i+9] << endl << endl; cout << "到达图书馆的最短路径为" << dis[i+10] << endl << endl; cout << "到达网络楼的最短路径为" << dis[i+11] << endl << endl; cout << "到达数学院的最短路径为" << dis[i+12] << endl << endl; cout << "到达教师公寓的最短路径为" << dis[i+13] << endl << endl; cout << "到达机电院的最短路径为" << dis[i+14] << endl << endl; }
int main() { string a = "泰园餐厅"; string b = "机电院"; map_init(); create_matrix(); input_matrix(a,b); dijkstra(); print(); }
|