单源最短路径(四)————Dijkstra算法

来源:互联网 发布:iapp锁机源码大全 编辑:程序博客网 时间:2024/05/17 04:57
  1. package om.eshore.sweetop.minpath;
  2. public class Dijkstra extends Graphics {
  3.     Dijkstra(Vertex...vs){
  4.         int index=0;
  5.         for (Vertex v : vs) {
  6.             list.add(v);
  7.             v.setIndex(index++);
  8.         }
  9.     }
  10.     
  11.     @Override
  12.     public boolean minPath(Vertex v) {
  13.         initSingleSource(v);
  14.         for (int i = 0; i < list.size(); i++) {
  15.             //可以在外循环中使用斐波那契堆实现获取第i个最小值
  16.             //这里考虑到Dijkstra只可以解非负权值的有向图,也就是E(u,v) d(v)>d(u)的特性
  17.             //其实这层的复杂度都是lg(n)
  18.             Quick.sort(list);
  19.             Vertex min=list.get(i);
  20.             System.out.println(min);
  21.             for (Vertex u : min.getV()) {
  22.                 relax(min,u);
  23.             }
  24.         }
  25.         return true;
  26.     }
  27.     
  28.     public void relax(Vertex u,Vertex v){
  29.         if(v.getD()>u.getD()+u.weight(v)){
  30.             v.setD(u.getD()+u.weight(v));
  31.             v.setParent(u);
  32.         }
  33.     }
  34. }
原创粉丝点击