public class Floyd {

  public static int U = Integer.MAX_VALUE/3;
  
  public static void main(String[] args) {
/*    int[][] a = {
        { 0,10, U,30,100},
        { U, 0,50, U,  U},
        { U, U, 0, U, 10},
        { U, U,20, 0, 60},
        {70, U, U, U,  0}};
*/
    int[][] a = {
        {0,2,3,U},
        {2,0,5,1},
        {3,5,0,7},
        {U,1,7,0}};
/*
    int[][] a = {
        {0,2,U,5},
        {U,0,4,1},
        {1,3,0,6},
        {U,U,1,0}};
*/    
    
    
    
    
    //Floyd-Algorithmus
    for (int i=0; i<a.length; i++) {
      for (int j=0; j<a.length; j++) {
        for (int k=0; k<a.length; k++) {
          if (a[j][k]>a[j][i]+a[i][k]) {
            a[j][k]=a[j][i]+a[i][k];
          }
        }
      }
    }
    
    
    //Ausgabe
    for (int i=0; i<a.length; i++) {
      for (int j=0; j<a.length; j++) {
        if (a[i][j]==U) {
          System.out.print(" ---");
        } else {
          System.out.printf("%4d",a[i][j]);
        }
      }
      System.out.println();
    }
  }
}
