MY MEMO
[ALGOSPOT] ROUTING 신호 라우팅 본문
ALGOSPOT ROUTING : http://www.playsw.or.kr/repo/cast/105
최단 경로 알고리즘 (다익스트라 알고리즘 Dijkstra Algorithm)을 이용
최단 경로 알고리즘 개념
참고 : http://www.playsw.or.kr/repo/cast/105
visit라는 vector를 정의하여 목적지 노드로 갈 수 있는 최소의 거리를 저장한다.
visit의 초기값은 무한대이므로 double의 최대인 DBL_MAX로 초기화한다.
1. 시작할 땐 noise에 있는 distance 값을 1.0으로 초기화 한다. -> 곱해야 자기 자신이 나올 수 있도록
여기서 distance는 현재까지 이동한 값이다. 이 값에 간선의 가중치를 곱하여 visit의 값과 비교한다
시작하는 index는 0
2. 시작하는 노드에 연결된 간선들 모두 방문한다
3. distance와 간선의 가중치를 곱한 값이 visit보다 작으면 갱신하고 noise라는 우선순위큐에 목적지까지의 최소 거리와 목적지의 노드의 index을 넣는다
4. 우선 순위 큐 noise가 비어있을 때까지 반복한다
5. 문제에서는 마지막 번호가 목적지로 설정해두었으므로 visit[visit.size()-1]을 return 한다
이중배열로 구현한다면 메모리 초과가 뜰 가능성이 있다
그러므로 인접 리스트를 vector를 이용하여 구현하였다
인접 리스트 인접 배열 개념
참고 : http://talksis.tistory.com/31
+)
priority_queue의 기준값은 첫번째 값이다
예를 들어 priority_queue <pair<double,int>> max_heap;
double을 기준값으로 정렬된다
+) pair로 정의했다면 make_pair를 이용하여 push해야한다.
'ALGORITHM > ALGORITHM STUDY' 카테고리의 다른 글
[Google Code Jam]2016_Qualification Round_ProblemC_Coin Jam (0) | 2017.03.28 |
---|---|
[ALGOSPOT] RATIO 승률 올리기 (0) | 2017.02.25 |
[DATASTRUCTURE] DFS, BFS (0) | 2017.02.25 |
[ALGOSPOT] TRAVERSAL 트리 순회 순서 변경 (0) | 2017.02.25 |
[ALGOSPOT] LAN 근거리 네트워크 (0) | 2017.02.25 |