zoukankan      html  css  js  c++  java
  • JAVA实现DIJKSTRA算法

    import java.util.Queue;
    import java.util.LinkedList;
    
    public class dijkstra{
      public static void main(String args[]){
        System.out.println("dijkstra algo");
        /*construct the adjacent table begin*/
          Node n0 = new Node(0);
          Node n1 = new Node(1);
          Node n2 = new Node(2);
          Node n3 = new Node(3);
          Node n4 = new Node(4);
          Node n5 = new Node(5);
          AdjNode n0n1 = new AdjNode(7,n1);
          AdjNode n0n2 = new AdjNode(9,n2);
          AdjNode n0n5 = new AdjNode(14,n5);
          
          AdjNode n1n0 = new AdjNode(7,n0);
          AdjNode n1n2 = new AdjNode(10,n2);
          AdjNode n1n3 = new AdjNode(15,n3);
    
          AdjNode n2n0 = new AdjNode(9,n0);
          AdjNode n2n5 = new AdjNode(2,n5);
          AdjNode n2n3 = new AdjNode(11,n3);
          
          AdjNode n3n1 = new AdjNode(15,n1);
          AdjNode n3n2 = new AdjNode(11,n2);
          AdjNode n3n4 = new AdjNode(6,n4);
          
          AdjNode n4n3 = new AdjNode(6,n3);
          AdjNode n4n5 = new AdjNode(9,n5);
          
          AdjNode n5n4 = new AdjNode(9,n4);
          AdjNode n5n2 = new AdjNode(2,n2);
          AdjNode n5n0 = new AdjNode(14,n0);
          
          AdjNode[] n0adj = {n0n1,n0n2,n0n5};
          AdjNode[] n1adj = {n1n0,n1n2,n1n3};
          AdjNode[] n2adj = {n2n0,n2n5,n2n3};
          AdjNode[] n3adj = {n3n1,n3n2,n3n4};
          AdjNode[] n4adj = {n4n3,n4n5};
          AdjNode[] n5adj = {n5n4,n5n2,n5n0};
          n0.addAdjNodes(n0adj);
          n1.addAdjNodes(n1adj);
          n2.addAdjNodes(n2adj);
          n3.addAdjNodes(n3adj);
          n4.addAdjNodes(n4adj);
          n5.addAdjNodes(n5adj);
          /*construct the adjacent table end*/
          Node[] G = {n0,n1,n2,n3,n4,n5};
          
          Queue<Node> queue = new LinkedList<Node>();
          AdjNode[] currAdjNodes;
          n0.color = 1;
          n0.vt++;
          n0.setShortestPathLen(0);
          queue.offer(n0);
          Node currNode = queue.poll();
        while(currNode != null){
            currAdjNodes = currNode.getAllAdjNodes();
            
            for(int i=0;i<currAdjNodes.length;i++){
                if(currAdjNodes[i].adjNode.getShortestPathLen() > (currNode.getShortestPathLen()+currAdjNodes[i].weight)){
                      currAdjNodes[i].adjNode.setShortestPathLen(currNode.getShortestPathLen()+currAdjNodes[i].weight);
                      currAdjNodes[i].adjNode.setPreNode(currNode);
                }
              if(currAdjNodes[i].adjNode.color == 0){
                currAdjNodes[i].adjNode.color = 1;
                currAdjNodes[i].adjNode.vt++;
                queue.offer(currAdjNodes[i].adjNode);
              }    
            }
            
            currNode.color = 2;
          currNode = queue.poll();
        }
        
        for(int i=0;i<G.length;i++){
          System.out.println("shortest path of " + i + "node:" + G[i].getShortestPathLen()+" vt:"+G[i].vt);
        }
      }
    }
    public class Node{
      private int index = 0,shortestPathLen = 10000;
      private Node preNode = null;
      private AdjNode[] nodeArray;
      public int color = 0;
      public int vt = 0;
      public Node(int ind){
        index = ind;    
      }
      
      public void addAdjNodes(AdjNode[] nodes){
        nodeArray = nodes;    
      }
      
      public AdjNode[] getAllAdjNodes(){
        return nodeArray;    
      }
      
      public void setPreNode(Node n){
        preNode = n;    
      }
      
      public void setShortestPathLen(int len){
        shortestPathLen = len;    
      }
      
      public int getShortestPathLen(){
        return shortestPathLen;    
      }
    }
    public class AdjNode{
      int weight = 0;
      Node adjNode = null;
      public AdjNode(int w,Node n){
        adjNode = n;    
        weight = w;
      }
    }
  • 相关阅读:
    技术沙龙.:主题为《代码解析Castle(IOC)应用实例 -开源CMS 系统Cuyahoga》
    Active Record和Domain Object + Dao
    SNMP++.NET 项目
    微软发布Windows Vista Tips and Tricks网站
    2007 Office System Video
    使用搜索引擎搜索结果
    我购买了一台acer笔记本
    有价值的杂志《MSDN杂志》中文版
    Spring2.0中文参考手册(中文版) [转自CSDN论坛]
    开源项目Generics.Net介绍
  • 原文地址:https://www.cnblogs.com/donghua/p/6821633.html
Copyright © 2011-2022 走看看