ホームに戻る
ワーシャル・フロイド
//m[n][n] = 0 をする。(自分自身に対してはかならず 0)
//m[i][j] = 1 であるとき i から j に向かうときコスト 1。
//m[i][j] = 100000 をする。行けない場合は十分に大きな値。
//結果は WF 後に m[i][j] に入る。
long long m[V][V];
for(long long i = 0; i < V; i++){
for(long long r = 0; r < V; r++){
if(i == r){
m[i][i] = 0;
}
else{
m[i][r] = 1000000000000000000LL; // 十分に大きな数値
}
}
}
for(long long i = 0; i < E; i++){
m[e[0][i]][e[1][i]] = e[2][i];
m[e[1][i]][e[0][i]] = e[2][i];
}
for(long long k = 0; k < V; k++){
for(long long i = 0; i < V; i++){
for(long long j = 0; j < V; j++){
if(m[i][j] > m[i][k] + m[k][j]){
m[i][j] = m[i][k] + m[k][j];
}
}
}
}