[c++] 플로이드-와샬 알고리즘(Floyd-Warshall Algorithm) 최단 경로 알고리즘
Floyd-Warshall 알고리즘은 다이내믹 프로그래밍을 활용하여 구현됩니다. 이 알고리즘의 핵심 아이디어는 정점을 하나씩 추가하면서 해당 정점을 거쳐 가는 최단 거리를 업데이트하는 것입니다.
아래는 C++로 플로이드-와샬 알고리즘을 구현한 간단한 예제 코드입니다.
#include <iostream>
#include <climits>
#define V 4
#define INF 99999
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++) {
if (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)
std::cout << "INF ";
else
std::cout << dist[i][j] << " ";
}
std::cout << std::endl;
}
}
int main() {
int graph[V][V] = {{0, 5, INF, 10},
{INF, 0, 3, INF},
{INF, INF, 0, 1},
{INF, INF, INF, 0}};
floydWarshall(graph);
return 0;
}
이 코드는 4개의 정점과 특정 간선 가중치를 포함하는 그래프에 플로이드-와샬 알고리즘을 적용하여 모든 쌍의 최단 거리를 계산합니다.