알고리즘 백준 1967 참고
현재 값 + 간선 값
을 최소값으로 갱신하며 마지막-1
노드까지 진행1차원 리스트
에 저장하며 리스트를 계속해서 갱신시작 노드 -> 최단 거리 입력
FOR문
노드 순회해 방문 X, 최소 거리를 지닌 노드 찾아 -> 최단 거리 입력
모든 노드에 대하여 다른 모든 노드로 가는 최단 거리 정보를 담는다
DP 알고리즘의 한 종류, 작은 문제들을 최신화하며 결국 모든 경우의 수를 파악한다
MIN(Mab, Mak + Mkb)
: a에서 b를 바로 가는 경우와 k를 거쳐가는 경우 중 더 짧은 거리로 최신화a -> b
와 a -> k
+ k -> b
두 가지 경우 중 최단 거리로 최신화해당 공식은 노드를 잇고 있는 모든 간선의 조합을 계산한다는 의미
ex) 1번 노드를 경유한다고 가정했을 때2 -> 1 -> 3
과 같은 경우를 고려한 후 2번 노드를 경유하는 차례에서4 -> 2 -> 1
과 같은 경우가 나오면 결국4 -> 2-> 1-> 3
경우도 고려하는 것으로 볼 수 있기 때문
결국 N개의 노드를 경유 지점으로 앞, 뒤 모든 경우의 수를 따지기에 N * (N*N)
, O(N3)
시간 복잡도가 나온다
모든 지점의 최단 거리를 비교하는 것이기에 2차원 배열(인접 행렬 자료구조) 구조를 사용
/*
초기 세팅
1.초기의 전체 값 무한 변경
2. i => i, 출발 = 도착인 경우 0으로 초기화
3. 간선 초기 값 입력 대입
*/
for n // n개의 노드라 가정
for start
for end
Xab = min(Xab, Xstartn + Xnend)