所有节点对的最短路径

来源:互联网 发布:淘宝排名新规则 编辑:程序博客网 时间:2024/04/30 02:59
package com.data.struct;import java.util.Random;public class AllPairsShortestPath {private Node [][]graphic;public AllPairsShortestPath(int v,int e){graphic=new Node[v][v];for(int i=0;i<e;i++){int v1=new Random().nextInt(v);int v2=new Random().nextInt(v);Node node=new Node();//node.d=Integer.MAX_VALUE-1000;node.w=new Random().nextInt(v)+1;node.start=v1;node.end=v2;graphic[v1][v2]=node;}for(int i=0;i<v;i++){if(graphic[i][i]==null){Node node=new Node();//node.d=Integer.MAX_VALUE-1000;node.w=0;node.start=i;node.end=i;graphic[i][i]=node;}else{graphic[i][i].w=0;}}}public Node[][]extendShortestPaths(Node[][]l){Node[][]L=new Node[l.length][l.length];for(int i=0;i<L.length;i++){for(int j=0;j<L.length;j++){Node node=new Node();node.w=Integer.MAX_VALUE;L[i][j]=node;if(i==j){node.w=0;}else{for(int k=0;k<l.length;k++){if(l[i][k]!=null&&graphic[k][j]!=null){node.w=Math.min(node.w, l[i][k].w+graphic[k][j].w);}}}if(node.w==Integer.MAX_VALUE){L[i][j]=null;}}}return L;}public Node [][]fasterAllPairsShortestPath(){Node [][][] l=new Node[graphic.length][graphic.length][graphic.length];l[1]=graphic;int m=1;while(m<graphic.length-1){Node [][] a=extendShortestPaths(l[m]);System.out.println("a"+m*2+":");for(int i=0;i<a.length;i++){for(int j=0;j<a.length;j++){if(a[i][j]!=null){System.out.print(a[i][j].w+" ");}else{System.out.print(" "+" ");}}System.out.println();}for(int i=0;i<graphic.length;i++){for(int j=0;j<graphic.length;j++){Node node=new Node();for(int k=0;k<a.length;k++){node.start=i;node.end=j;if(a[i][j]!=null){node.w=a[i][j].w;}else{node.w=Integer.MAX_VALUE;}if(i==j){node.w=0;}else{if(a[i][k]!=null&&a[k][j]!=null){node.w=Math.min(node.w,a[i][k].w+a[k][j].w);}}}if(node.w==Integer.MAX_VALUE){l[2*m][i][j]=null;}else{l[2*m][i][j]=node;}}}System.out.println("l"+2*m+":");for(int i=0;i<l[2*m].length;i++){for(int j=0;j<l[2*m].length;j++){if(l[2*m][i][j]!=null){System.out.print(l[2*m][i][j].w+" ");}else{System.out.print(" "+" ");}}System.out.println();}m=2*m;}return l[m];}public void print(){System.out.println("origranal:");for(int i=0;i<graphic.length;i++){for(int j=0;j<graphic.length;j++){if(graphic[i][j]!=null){System.out.print(graphic[i][j].w+" ");}else{System.out.print(" "+" ");}}System.out.println();}Node [][] l=fasterAllPairsShortestPath();System.out.println("result:");for(int i=0;i<l.length;i++){for(int j=0;j<l.length;j++){if(l[i][j]!=null){System.out.print(l[i][j].w+" ");}else{System.out.print(" "+" ");}}System.out.println();}}private class Node{private int w;private int start;private int end;}public static void main(String[] args) {AllPairsShortestPath a=new AllPairsShortestPath(5,20);a.print();}}

0 0
原创粉丝点击