打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一个Dijkstra算法的完整Java程序实现,算法初学者必看!
public class Dijkstra {  
     public static void main(String[] args) {      
     new Dijkstra().use();   
}     
  public void use(){   
        new Dijkstra().dijkstra(0, a, dist, prev);     
          for (int i = 0; i < dist.length; i++) {    
               System.out.print(dist[i]+"  ");    
   }  
 } 
  //单元最短路径问题的Dijkstra算法   
public void dijkstra(int v ,float[][] a, float[] dist,int[] prev){  
     int n = dist.length - 1 ;    
     if(v < 0 || v > n-1)  return;    
     boolean[] s = new boolean[n+1];    
           //初始化     
     for(int i = 1; i <= n; i++){  
         dist[i] = a[v][i];      
         s[i] = false;       
        if(dist[i] == Float.MAX_VALUE){       
            prev[i] = 0;       
           } else {           
                prev[i] = v;        
           }  
     }        
   dist[v] = 0;      
   s[v] = true;    
   for(int i = 1; i < n; i++){      
     float temp = Float.MAX_VALUE;   
        int u = v;     
       for(int j = 1; j <= n; j++){   
            if((!s[j]) && (dist[j] < temp)){       
                  u = j;              
                 temp = dist[j];        
               }     
      }        
   s[u] = true;  //找到了第一个并入S的节点  
    for(int j = 1; j <= n; j++){      
        if((!s[j]) && (a[u][j] < Float.MAX_VALUE)){    
               float newdist = dist[u] + a[u][j];       
               if(newdist < dist[j]){                
                  //dist[j] 减少                
                   dist[j] = newdist;    
                   prev[j] = u;               
                    }      
         }        
   }     
  }   
}   

private   float[][] a = {  
              {0,10,max,30,100},   
                {max,0,50,max,max},  
                 {max,max,0,max,10},    
              {max,max,20,0,60},         
              {max,max,max,max,0}        
           };     
 private float[] dist = new float[5];  
 private  int[] prev = new int[5];   
 public static final float max = Float.MAX_VALUE;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra 算法和 Floyd算法
算法设计与分析 4.5 单源最短路径
图解Bellman
图的最短路径Dijkstra算法及matlab实现
单源最短路径(1):Dijkstra算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服