>>分享数据结构和算法相关的知识和技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 25011 个阅读者 刷新本主题
 * 贴子主题:  无向图的最短路径求解算法之——Dijkstra算法 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-03-15 21:20:39     消息  查看  搜索  好友  邮件  复制  引用

    刚开始学dijkstra算法的时候,写过一篇关于dijkstra算法的博客,留下的QQ,结果很多人来询问。

         后来,发现那个代码写得实在是太难看了,于是把代码重新整理了一下,贴上来吧。数据还是http://sbp810050504.blog.51cto.com/2799422/690803 里面的数据。
  1.    import  java.util.Arrays;
  2.    public   class  Dijkstra {
  3.        private   static   final   int  inf=Integer.MAX_VALUE; //表示两个点之间无法直接连通  
  4.        public   static   int [] dijkstra( int [][] graph, int  n, int  u){
  5.            int  dist[]= new   int [n];
  6.            boolean  s[]= new   boolean [n];
  7.           Arrays.fill(s,  false );
  8.           Arrays.fill(dist, inf);
  9.            int  min,v;
  10.            for ( int  i= 0 ;i<n;i++){
  11.               dist[i]=graph[u][i];
  12.           }
  13.           s[u]= true ;
  14.            while ( true ){
  15.               min=inf;v=- 1 ;
  16.                //找到最小的dist  
  17.                for ( int  i= 0 ;i<n;i++){
  18.                    if (!s[i]){
  19.                        if (dist[i]<min){min=dist[i];v=i;}
  20.                   }
  21.               }
  22.                if (v==- 1 ) break ; //找不到更短的路径了  
  23.                //更新最短路径  
  24.               s[v]= true ;
  25.                for ( int  i= 0 ;i<n;i++){
  26.                    if (!s[i]&&
  27.                           graph[v][i]!=inf&&
  28.                           dist[v]+graph[v][i]<dist[i]){
  29.                       dist[i]=dist[v]+graph[v][i];
  30.                   }
  31.               }
  32.           }
  33.            return  dist;
  34.       }
  35.        public   static   void  main(String[] args) {
  36.             int [][] W = {  
  37.                       {   0 ,    1 ,    4 ,  inf,  inf,  inf },
  38.                       {   1 ,    0 ,    2 ,    7 ,     5 ,  inf },
  39.                       {   4 ,    2 ,    0 ,  inf,     1 ,  inf },  
  40.                       { inf,   7 ,  inf,    0 ,     3 ,     2  },
  41.                       { inf,   5 ,     1 ,    3 ,    0 ,     6  },  
  42.                       { inf, inf,  inf,    2 ,    6 ,     0  } };
  43.             int [] dist=dijkstra(W,  6 ,  0 );
  44.             for  ( int  i : dist) {
  45.                   System.out.print(i+ " " );
  46.               }
  47.            System.out.println();
  48.       }
  49.   }

               ----------------------------
原文链接:https://blog.51cto.com/sbp810050504/1163565

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-16 11:30:47 重新编辑]
  Java面向对象编程-->Swing组件(下)
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->用Axis发布Web服务
  精通Spring-->创建综合购物网站应用
  Vue3开发-->Vue指令
  整理得吐血了,二叉树、红黑树、B、B+树超齐全,快速搞定数据...
  Codility 算法测验
  无向图的最短路径求解算法之——Dijkstra算法
  图像基本处理算法的简单实现
  银行家算法范例
  进程调度算法总结
  令牌桶算法
  LRU算法的简单实现范例
  全排列的六种算法
  绕圆算法
  一种码位倒置算法
  算法优化策略之“中途相遇”算法思想
  微软面试题:买卖股票的最佳时机
  字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序...
  为什么要学数据结构?
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。