まず、必要なヘッダーファイルをインクルードします。
#include <iostream>
#include <climits>
using namespace std;
次に、頂点の数と辺の数を定義します。
#define V 4 // グラフの頂点の数
#define INF INT_MAX // 無限大を表す値
最短経路を計算する関数を定義します。
void floydWarshall(int graph[][V]) {
int dist[V][V];
// 初期距離を入力グラフと同じに設定
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
dist[i][j] = graph[i][j];
}
}
// 中間頂点をすべて経由する場合の最短経路を計算
for (int k = 0; k < V; k++) {
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
// 頂点kを経由する経路が、直接の経路よりも短い場合は更新
if (dist[i][k] != INF && dist[k][j] != INF && dist[i][k] + dist[k][j] < dist[i][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
// 最短経路の出力
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
if (dist[i][j] == INF) {
cout << "INF ";
} else {
cout << dist[i][j] << " ";
}
}
cout << endl;
}
}
以上のコードを使用して、Floyd-Warshallアルゴリズムを実行するためのメイン関数を書きます。
int main() {
// グラフの隣接行列を定義
int graph[V][V] = {
{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}
};
// Floyd-Warshallアルゴリズムを実行
floydWarshall(graph);
return 0;
}
このコードは、4つの頂点を持つグラフの最短経路を計算します。INFは、頂点間の経路が存在しないことを示します。実行すると、最短経路行列が出力されます。
以上が、C++を使用してFloyd-Warshallアルゴリズムを実装する方法の例です。このアルゴリズムは、グラフ内の全ての頂点間の最短経路を見つけるために役立ちます。