• 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];
                        } 
                    }
                }
            }
  • 相关阅读:
    S2dao 简单Demo(转)
    Iphone SDK textField 打开和关闭键盘
    s2dao 入门知识2
    Eclipse tomcat Web页面调试
    s2dao 入门知识1
    java 面试
    Iphone SDK ActionSheet 在当前窗口弹出时间选择
    杭电2044
    杭电2076
    杭电2077
  • 原文地址:https://www.cnblogs.com/tenghaoxiang/p/10084477.html
Copyright © 2020-2023  润新知