ワーシャル・フロイド法
コード例
#include <bits/stdc++.h>
using namespace std;
int main() {
  // 頂点数
  int n = 6;
  // 隣接行列を用意。全てINFで埋めておく
  int INF = 1000000000;
  vector<vector<int>> edge(n, vector<int>(n, INF));
  // 辺の登録。
  edge[0][1] = edge[1][0] = 9;
  edge[0][4] = edge[4][0] = 3;
  edge[0][5] = edge[5][0] = 4;
  edge[1][2] = edge[2][1] = 4;
  edge[1][5] = edge[5][1] = 3;
  edge[2][3] = edge[3][2] = 2;
  edge[3][4] = edge[4][3] = 5;
  edge[3][5] = edge[5][3] = 5;
  edge[4][5] = edge[5][4] = 2;
  // 移動元と移動先が同じ場合は距離を0にしておく
  for (int i = 0; i < n; i++) {
    edge[i][i] = 0;
  }
  // 外側のループ変数は経由点、
  // 中央のループ変数は移動元の点、
  // 内側のループ変数は移動先の点になる
  for (int k = 0; k < n; k++) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        edge[i][j] = min(edge[i][j], edge[i][k] + edge[k][j]);
      }
    }
  }
  cout << edge[0][3] << endl; // 頂点0から3までの最短距離
  cout << edge[4][2] << endl; // 頂点4から2までの最短距離
}
計算量
頂点 V の数だけ走査するループが 3 重にあるので計算量は になる。
解説/アルゴリズム
ワーシャル・フロイド法は全頂点対間の最短距離を求めるアルゴリズム。