모든 노드를 탐색하는데 필요한 최소 가중치 값을 구하는 알고리즘
철수는 이번 여행에서 계획한 관강지를 꼭 모두 갈 예정이다 하지만 돈이 많이없어서 오래 여행지에서 머물 여유가 없다 가장 최단 시간으로 관장지를 모두 둘러보는 방법을 구해라
※ 최대 숙소 + 관광지수 -1 만큼의 관광을 할 수 있다.
숙소 = 관광 시작노드, 관광지 = 나머지 노드
※ 여행지 정보에 따른 가장 짧은 관광 계획이어야 한다.
가중치 최소합을 리턴
※ 맘에드는 관광지가 있을 수 있지만 어쩔 수 업는 상황이 아니면 한번 관광한 관광지를 반복해서 관광하는 루트는 짜면 안된다.
사이클 포함 X
위의 세가지 조건을 만족하면서 모든 노드를 탐색하는 알고리즘이다.
그래프의 간선 정보를 기반으로 현재 노드에서 뻗어나갈 수 있는 간선들의 가중치 정보를 최소 가중치 경로를 저장할 배열(이하 경로 배열)에 저장한다.
경로 배열에 저장된 가중치 중 가장 적은 가중치를 가진 간선을 선택해서 이어진 노드로 이동한다.
해당 노드에서 다시 각 노드로 가는 가중치와 시작 노드에서 현재 노드까지 오는데 합산된 가중치를 더해서 현재 경로 배열에 저장된 값과 비교한다.
3번 설명에 대한 예시
간선과 가중치 정보가 A- > C, (5) A → B, (3) B → C (1)과 같은 상황이라고 가정했을 때 현재 상황이 A노드로 시작해 B노드에 와 있는 상황이라고 해보자,
이 때 경로 배열에 저장된 값은 A = 0, B = 3, C = 5 일 것 이다. 여기서 B 노드가 C 노드를 바라봤다.
B → C (1) B에서 C로 갈때 필요한 가중치 1과 A에서 B로 올 때 쌓인 가중치 3을 더했을 때 총 4가 나온다 A에서 C로 바로가는 가중치 5보다 효율적이다. 이 때 경로 배열의 값 5를 4로 갱신한다.
더 많은 노드를 거치더라도 더 적은 가중치를 가지는 경로로 갱신한다는 의미이다.
위의 2~3번을 반복한다.