zoukankan      html  css  js  c++  java
  • Dijkstra

      1 package fred.ubs.test.src.algo;
      2 
      3 public class DijkstraTest {
      4     public static void main(String[] args) {
      5         int n = 8;
      6         Node[] nodes = new Node[n];
      7         setupNodes(nodes);
      8         float[] d = new float[n];
      9         int[] p = new int[n];
     10         
     11         dijkstra(nodes, n, 0, d, p);
     12         
     13         for(int i = 0; i < n; i++){
     14             System.out.print(d[i] + " ");
     15         }
     16 
     17         for(int i = 0; i < n; i++){
     18             System.out.print(p[i] + " ");
     19         }
     20     }
     21     
     22     public static void dijkstra(Node[] nodes, int n, int u, float[] d, int[] p){
     23         float temp;
     24         int i, j, t;
     25         boolean[] s = new boolean[n];
     26         Node pNode;
     27         
     28         for(i = 0; i <n; i++){
     29             d[i] = Float.MAX_VALUE;
     30             s[i] =false;
     31             p[i] = -1;
     32         }
     33         
     34         if(null == (pNode = nodes[u].next)){
     35             return;
     36         }
     37         
     38         while(pNode != null){
     39             d[pNode.v_num] = pNode.len;
     40             p[pNode.v_num] = u;
     41             pNode = pNode.next;
     42         }
     43         
     44         d[u] = 0;
     45         s[u] = true;
     46         
     47         for(i = 1; i < n; i++){
     48             temp = Float.MAX_VALUE;
     49             t = u;
     50             for(j = 0; j <n; j++){
     51                 if(!s[j] && d[j] < temp){
     52                     t = j;
     53                     temp = d[j];
     54                 }
     55             }
     56             if(t == u){
     57                 break;
     58             }
     59             s[t] = true;
     60             pNode = nodes[t].next;
     61             while(pNode != null){
     62                 if(!s[pNode.v_num] && d[pNode.v_num] > d[t] + pNode.len){
     63                     d[pNode.v_num] = d[t] + pNode.len;
     64                     p[pNode.v_num] = t;
     65                 }
     66                 
     67                 pNode = pNode.next;
     68             }
     69         }
     70     }
     71 
     72     private static void setupNodes(Node[] nodes){
     73         Node nodeA = new Node(0, 0, new Node(1, 1, new Node(4, 2, new Node(4, 3, null))));
     74         Node nodeB = new Node(0, 1, new Node(2, 2, new Node(9, 4, null)));
     75         Node nodeC = new Node(0, 2, new Node(3, 3, new Node(6, 4, new Node(3, 5, new Node(4, 6, null)))));
     76         Node nodeD = new Node(0, 3, new Node(7, 6, null));
     77         Node nodeE = new Node(0, 4, new Node(1, 7, null));
     78         Node nodeF = new Node(0, 5, new Node(2, 4, new Node(5, 7, null)));
     79         Node nodeG = new Node(0, 6, new Node(1, 5, new Node(3, 7, null)));
     80         Node nodeH = new Node(0, 7, null);
     81         
     82         nodes[0] = nodeA;
     83         nodes[1] = nodeB;
     84         nodes[2] = nodeC;
     85         nodes[3] = nodeD;
     86         nodes[4] = nodeE;
     87         nodes[5] = nodeF;
     88         nodes[6] = nodeG;
     89         nodes[7] = nodeH;
     90     }
     91 
     92     static class Node{
     93 
     94         public Node(float len, int v_num, Node next) {
     95             this.v_num = v_num;
     96             this.len = len;
     97             this.next = next;
     98         }
     99 
    100         public int v_num;
    101         public float len;
    102         public Node next;
    103     }
    104 }
  • 相关阅读:
    Jenkins安装以及邮件配置
    day12_框架一tools.py代码
    codeforces 1428F
    codeforces 1428G Lucky Numbers (贪心+dp)
    单调队列优化多重背包
    bzoj1190 梦幻岛宝珠
    codeforces 1421 D
    bzoj 2287消失之物 (退背包)
    codeforces 553A
    组合计数小结
  • 原文地址:https://www.cnblogs.com/glf2046/p/4129246.html
Copyright © 2011-2022 走看看