Dijkstra演算法-Java實現
阿新 • • 發佈:2018-12-07
給定n個城市,並建立一個n*n的距離矩陣來存放兩兩城市之間的距離,當兩個城市之間不能直達時,將距離記為無窮大。對矩陣進行初始化:
for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { arcs[i][j] = Double.POSITIVE_INFINITY; if (i == j) { arcs[i][j] = 0; } } }
check陣列記錄此城市是否已經被新增到樹中,dist陣列用於表示起始點到i點的距離。給出起始點C1:
for (int i = 0; i < N; i++) { check[i] = false; dist[i] = arcs[C1][i]; }
每次找出距離當前點最近的下一個點,進行放鬆
int c = -1; while (c != C2) { double d = Double.POSITIVE_INFINITY; for(int i = 0; i < N; i++) { if (check[i] == true) { continue; } else { if (dist[i] < d) { c = i; d = dist[i]; } } } check[c]= true; for (int i = 0; i < N; i++) { if (check[i] == true) { continue; } else { if ((dist[i] - dist[c] - arcs[c][i]) > 0) { dist[i] = dist[c] + arcs[c][i]; } } } }