티스토리 뷰
특정 출발 노드에서 다른 모든 노드까지의 최단 경로를 구하는 알고리즘.
- 간선의 가중치가 음인 경우에도 사용가능 하다.
- 음의 사이클이 있는지 확인 할 수 있다.
V : 노드의 갯수
D[i] : 출발점에서 K 정점 까지의 최소 비용 (D[출발] = 0, 나머지는 무한대로 초기화)
1. 모든 간선을 (V - 1)번 확인한다.
D[now] != INF 이고 D[next] > D[now] + W (간선의 가중치) 이면
D[next] = D[now] + W 로 갱신한다.
2. V번째 간선을 확인했을 때 D가 갱신된다면 음의 사이클이 존재한다.
시간복잡도 : O(VE)
1 2 3 4 5 6 7 8 9 10 11 12 13 | D[1] = 0; // 출발점의 비용은 0 FOR(i, 1, V) { for (info edge : v) { // 간선이 저장된 배열을 V-1번 돌며 확인한다. if (D[edge.u] == MAX_INT) continue; // 경로가 없으면 패스 if (D[edge.v] > D[edge.u] + edge.w) D[edge.v] = D[edge.u] + edge.w; // 값 갱신 } } bool flag = false; for (info edge : v) { //V 번째 간선 확인 if (D[edge.u] == MAX_INT) continue; if (D[edge.v] > D[edge.u] + edge.w) flag = true; // 값의 갱신이 일어나면 음의 사이클 존재 } | cs |
반응형
'자료구조와 알고리즘' 카테고리의 다른 글
머지 소트 (0) | 2019.03.29 |
---|
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩 면접
- #패스트캠퍼스 #프로그래밍대학생서포터즈 #올인원패키지 #컴퓨터공학 #성공하는프로그래밍공부법
- c언어
- 올인원 패키지
- 자료구조
- Fast Campus
- 운영체제
- 프로그래밍 온라인 강의
- 패스트캠퍼스
- 컴퓨터공학
- 개발자 취업
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함