ホームに戻る
ワーシャル・フロイド

//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];
      }
    }
  }
}

inserted by FC2 system