다익스트라 알고리즘 질문드립니다.
257
Eunyoung Roh
작성한 질문수 4
0
안녕하세요 선생님, 다익스트라 알고리즘 질문드립니다.
제가 강의를 듣고 이해하면서 나름대로 주석을 적어 봤는데 맞는지 모르겠습니다. 한번 확인해 주시면 정말 감사하겠습니다. 선생님의 답변이 학습에 큰 도움이 되고 있습니다.
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <limits>
using namespace std;
struct Edge {
int destVertex;
int distance;
Edge(int dest, int weight){
destVertex = dest;
distance = weight;
}
bool operator < (const Edge &edge) const {
return distance > edge.distance; // minimum heap
}
};
int main(int argc, char** argv) {
freopen("input.txt", "rt", stdin);
int vertexSize, edgeSize;
cin >> vertexSize >> edgeSize;
vector<Edge> graph[vertexSize + 1];
for(int i = 0; i < edgeSize; i++){
int source, dest, cost;
cin >> source >> dest >> cost;
graph[source].push_back(Edge(dest, cost));
}
vector<int> dists(vertexSize + 1, INT_MAX);
priority_queue<Edge> myPQueue;
myPQueue.push(Edge(1, 0));
dists[1] = 0;
while(!myPQueue.empty()){
// 현재 시점에서 최소 거리로 이동할 수 있는 엣지를 꺼냄
Edge edge = myPQueue.top();
myPQueue.pop();
// 꺼낸 엣지를 통해 movedVertex 정점으로 이동해 왔다고 가정함
int movedVertex = edge.destVertex;
int movedDist = edge.distance;
// movedVertex에 더 작은 비용으로 왔던 적이 있다면 살펴볼 필요가 없음
if(movedDist > dists[movedVertex]) continue;
// movedVertex과 연결된 엣지를 탐색 : 뻗어나가기
for(int i = 0; i < graph[movedVertex].size(); i++){
// connectedEdge = movedVertex와 연결된 엣지
Edge connectedEdge = graph[movedVertex][i];
// movedVertex와 엣지로 연결된 다른 정점
int nextVertex = connectedEdge.destVertex;
// nextDist = movedVertex까지 오는 데 쓰인 거리 + 그 정점과 연결된 다른 정점까지의 거리
int nextDist = movedDist + connectedEdge.distance;
// 지금 구한 거리가 최소값이라서 갱신해야 하는 경우
if(nextDist < dists[nextVertex]){
// edge -> connectedEdge를 거쳐 이동한 거리로 갱신
dists[nextVertex] = nextDist;
// 이 엣지를 이용해 다른 노드로 갈 수 있도록 큐에 push
myPQueue.push(Edge(nextVertex, nextDist));
}
}
}
for(int i = 2; i <= vertexSize; i++){
if(dists[i] != INT_MAX)
cout << i << " : " << dists[i] << "\n";
else cout << i << " : impossible" << "\n";
}
return 0;
}
답변 1
테스트 케이스 질문
0
373
1
병합정렬 시간복잡도 질문
0
462
1
41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.
0
1344
2
질문드립니다.
0
376
1
질문드립니다!
0
430
1
dev 프로그램 질문
0
275
1
문제가 이해가 안되요
0
376
1
4번 나이차이 문제 접근법 질문 드립니다.
0
307
1
source file not compiled
0
1044
3
59번 질문드립니다.
0
372
1
25번 문제 질문
0
349
1
4. 나이차이 문제 질문입니다.
0
372
1
90번 라이언 킹 심바 1번 테스트 케이스
0
470
1
71번 문제 전역 변수 질문 있습니다
0
365
1
75번, 79번 priority_queue관련
1
355
1
75.최대 수입 스케줄
0
400
2
복면산 정답의 수
0
431
1
테스트 케이스에 대해서
0
445
1
수업 내용 질문입니다!
1
232
1
풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!
0
822
2
12. 플로이드-와샬(그래프 최단거리) . 27:25초
0
254
1
다른 풀이 방식
0
317
1
크루스칼 vs 프림
0
306
1
숫자 총개수 small 질문있습니다.
0
241
1





