Floyd(フロイド)最短パスアルゴリズム


入力
入力された最初の行は1つの正の整数nを含み、図にはn個の頂点があることを示す.ここでnは50を超えない.
以降のn行の各行には、スペースで区切られたn個の整数がある.i行目のj番目の整数について、0より大きい場合、i番目の頂点はj番目の頂点を指す有向辺があり、重み値は対応する整数値であることを示す.この整数が0である場合、iがjを指す有向辺がないことを示す.iとjが等しい場合、対応する整数が0であることを保証する.
しゅつりょく
n行が共有され、各行にはn個の整数があり、ソースポイントから各頂点までの最短パス長を表します.ソースポイントから対応する頂点へのパスが存在しない場合は、-1を出力します.頂点からそれ自体までの最短パス長に対して0を出力します.
各整数の後にスペースを出力し、行の最後に改行を出力することに注意してください.
サンプル入力
4
0 3 0 1
0 0 4 0
2 0 0 0
0 0 1 0

サンプル出力
0 3 2 1 
6 0 4 7 
2 5 0 3 
3 6 1 0 
#include
#include
#include
#include
using namespace std;
#define INF (1<<21)
const int N = 500;
int dist[N][N];
int n;
void floyd(){
    for(int k=0;k>n;
    for(int i=0;i>x;
           if(x==0)
            dist[i][j]=INF;
           else{
            dist[i][j]=x;
           }
        }
    }
    floyd();
     for(int i=0;i