[c++] 그래프 알고리즘의 적용 예시
그래프는 정점과 간선의 집합으로 구성된 자료 구조이며, 많은 문제들을 효과적으로 해결하는 데 사용됩니다. 이번 포스트에서는 C++을 사용하여 그래프 알고리즘을 어떻게 적용하는지 살펴보겠습니다.
그래프 알고리즘을 사용한 최단 경로 구하기
가장 대표적인 그래프 알고리즘 중 하나인 Dijkstra 알고리즘은 최단 경로를 찾는 데 사용됩니다. 다음은 C++으로 구현한 Dijkstra 알고리즘의 예시 코드입니다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define INF 1e9
vector<pair<int, int>> graph[1001]; // 그래프는 각 노드마다 연결된 노드와 거리를 저장함
int dist[1001];
void Dijkstra(int start) {
priority_queue<pair<int, int>> pq;
pq.push({0, start});
dist[start] = 0;
while (!pq.empty()) {
int cost = -pq.top().first;
int cur = pq.top().second;
pq.pop();
if (dist[cur] < cost) continue;
for (int i = 0; i < graph[cur].size(); i++) {
int next = graph[cur][i].first;
int nextCost = cost + graph[cur][i].second;
if (nextCost < dist[next]) {
dist[next] = nextCost;
pq.push({-nextCost, next});
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
graph[a].push_back({b, c});
}
fill(dist, dist + n + 1, INF);
int start;
cin >> start;
Dijkstra(start);
for (int i = 1; i <= n; i++) {
if (dist[i] == INF) {
cout << "INFINITY" << '\n';
} else {
cout << dist[i] << '\n';
}
}
return 0;
}
위의 코드는 Dijkstra 알고리즘을 사용하여 그래프에서 특정 노드에서 다른 모든 노드로의 최단 거리를 구하는 예시입니다.
결론
C++을 사용하여 그래프 알고리즘을 적용하는 방법에 대해 살펴보았습니다. 이러한 알고리즘을 이해하고 활용하면 다양한 문제를 효과적으로 해결할 수 있습니다. 또한, 프로그래밍 언어 및 알고리즘의 적용 방법을 학습하는 것이 중요합니다.
참고 자료
Dijkstra 알고리즘에 대한 자세한 내용은 다음의 참고 자료를 참고하세요.