算法|面向过程迪杰斯特拉算法

#include #include #include #include #include #include #define INSERT_EDGE(v,w,weight) am[v][w] = am[w][v] = weight using namespace std; int am[16][16]; int node; int u; string inf[16][16]; vectorvec; int s[16]; bool s_bool[16]; int dist[16]; int dist_h[16]; int dist_sort[16]; int prevx[16]; void Dijkstra(int n, int dist[], int prevx[], int am[16][16]); void get_path(int n); int main() {cout << "输入节点个数:"; cin>>node; INSERT_EDGE(1, 2, 1); INSERT_EDGE(2, 3, 2); INSERT_EDGE(2, 7, 3); INSERT_EDGE(3, 7, 2); INSERT_EDGE(3, 6, 7); INSERT_EDGE(6, 4, 3); INSERT_EDGE(7, 4, 6); INSERT_EDGE(4, 8, 4); INSERT_EDGE(7, 5, 11); INSERT_EDGE(5, 8, 9); cout << "输入邻接矩阵(用0表示无路劲,把它看作无穷大):"<= 0; i--) { cout << vec[i]; if (i!=0) { cout << " -> "; } }cout << endl << endl; }void Dijkstra(int n, int dist[], int prevx[], int am[16][16]) { for (int i = 1; i <= n; i++) { s_bool[i] = false; } s_bool[1] = true; int d = 1; s[d] = 1; for (int i = 1; i <= n; i++) { dist[i] = am[1][i]; }for (int k = 1; k < n; k++) { //选出最小的权值,dist_sort是对没有加入s集合的元素进行排序 int c = 1; for (int i = 1; i <= n; i++) { //当u==7时,dist[6]==10,dist[4]==10,dist[5]==15 if (s_bool[i] == false) { dist_h[i] = dist[i]; dist_sort[c] = dist[i]; c++; } }sort(dist_sort + 1, dist_sort + c); //当u==7时,dist_sort里面有10,10,15,因为有两个都是10,所有会导致循环2次,导致u无法等于4,直接跳过4,等于6,所以必须要用break终止循环 for (int i = 1; i <= n; i++) { if (dist_sort[1] == dist_h[i] && s_bool[i] == false) { cout<<"dist_sort[1]的最小取值:::::"<
文章图片

输入节点个数:8 输入邻接矩阵(用0表示无路劲,把它看作无穷大):无 1 无 无 无 无 无 无 1 无 2 无 无 无 3 无 无 2 无 无 无 7 2 无 无 无 无 无 无 3 6 4 无 无 无 无 无 无 11 9 无 无 7 3 无 无 无 无 无 3 2 6 11 无 无 无 无 无 无 4 9 无 无 无 dist_sort[1]的最小取值:::::1 dist_sort[1]的最小取值:::::3 dist_sort[1]的最小取值:::::4 dist_sort[1]的最小取值:::::10 dist_sort[1]的最小取值:::::10 dist_sort[1]的最小取值:::::14 dist_sort[1]的最小取值:::::15 prevx[1]=0 prevx[2]=1 prevx[3]=2 prevx[4]=7 prevx[5]=7 prevx[6]=3 prevx[7]=2 prevx[8]=4 s[1]=1 s[2]=2 s[3]=3 s[4]=7 s[5]=4 s[6]=6 s[7]=8 s[8]=5 最短路径是:14 路径走法是:1 -> 2 -> 7 -> 4 -> 8Program ended with exit code: 0

【算法|面向过程迪杰斯特拉算法】

    推荐阅读