1. 程式人生 > >Dijkstra演算法-Java實現

Dijkstra演算法-Java實現

給定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]; } } } }