首页 > 编程语言 > 详细

Dijkstra算法-Java实现

时间:2018-12-07 19:12:31      阅读:157      评论:0      收藏:0      [点我收藏+]

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

 

Dijkstra算法-Java实现

原文:https://www.cnblogs.com/tenghaoxiang/p/10084477.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!