package com.interview.basics.model.graph.weighted; import com.interview.basics.model.graph.WeightedGraph; /** * Created_By: stefanie * Date: 15-1-14 * Time: 下午9:54 */ /** * FLOYD-WARSHALL: O(N^3) * for (k = 1 to n) * for (i = 1 to n) * for (j = 1 to n) * adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]); */ public class ShortestPath_FloydWarshall { public double[][] shortestPath(WeightedGraph graph){ double[][] paths = new double[graph.V][graph.V]; for(int i = 0; i < graph.V; i++){ for(WeightedGraph.Edge edge : graph.adj(i)){ paths[edge.s][edge.t] = edge.w; } } for(int i = 0; i < graph.V; i++){ for(int j = 0; j < graph.V; j++){ for(int k = 0; k < graph.V; k++){ if (paths[i][k] + paths[k][j] < paths[i][j]) paths[i][j] = paths[i][k] + paths[k][j]; } } } return paths; } }