MY MEMO
[ALGOSPOT] LAN 근거리 네트워크 본문
ALGOSPOT LAN : https://algospot.com/judge/problem/read/LAN
최소 신장 트리(Minimum Spanning Tree)를 이용하는 문제
<최소 신장 트리 종류>
1. Kruskal algorithm
1.1 간선의 가중치를 작은 순으로 나열
1.2 나열한 간선 순서대로 연결해 본후 cycle이 생기면 연결하지 않음
1.3 위의 과정 반복
2. Prim algorithm
참고 : http://www.playsw.or.kr/repo/cast/106
<algorithm>
이 문제에서는 1번 Kruska 알고리즘을 사용했다.
1. 간선의 가중치를 priority queue를 이용하여 작은 순으로 나열
+)
priority_queue<int> max_heap; //이 우선순위 큐는 큰 수가 맨 처음으로
priority_queue<int,vector<int>,greater<int>> min_heap; //이 우선순위 큐는 작은 수가 처음으로
+ greater -> #include <functional>
+ priority_queue -> #include <queue>
+ vector -> #include <vector>
2. parent라는 배열을 두어 자신의 최상위 부모를 저장
-> 초기는 자기 자신이 최상위 부모이므로 자신의 값을 저장
3. 미리 연결된 노드 좌표를 입력 받은 후 parent를 갱신
4. 간선의 가중치가 작은 수부터 연결 -> 최상위 부모가 같으면 연결하지 않음 (cycle이 존재)
+)
cycle을 구현하는 방향이 가장 어려웠다
처음에는 인접 배열을 이용했으나 너무 복잡해서 구글링을 참고하여 구현하였다
아직 그래프 공부가 많이 부족하다
'ALGORITHM > ALGORITHM STUDY' 카테고리의 다른 글
[Google Code Jam]2016_Qualification Round_ProblemC_Coin Jam (0) | 2017.03.28 |
---|---|
[ALGOSPOT] RATIO 승률 올리기 (0) | 2017.02.25 |
[ALGOSPOT] ROUTING 신호 라우팅 (0) | 2017.02.25 |
[DATASTRUCTURE] DFS, BFS (0) | 2017.02.25 |
[ALGOSPOT] TRAVERSAL 트리 순회 순서 변경 (0) | 2017.02.25 |