문제
알고리즘
1. 한 노드에서 다른 노드로 이동하는데 필요한 비용 데이터를 저장하기 위해서 인접리스트를 선언하고 값을 저장한다.
2. 최소 비용을 구하기 위해서 편의상 answer
를 최대값으로 초기화 및 출발 지점 i
를 방문처리하고 DFS를 시작한다.
3. DFS 메소드에서 매개변수 start
와 인접한 각각의 노드까지의 이동 비용이 0이 아니고 방문하지 않았는지 확인한다.
4. 조건을 모두 만족하면 인접 노드 adj.idx
를 방문처리 후에 i
에서 출발하고 다시 돌아올 때까지 필요한 비용 sum
에 인접 노드까지의 비용 adj.cost
를 더해준다.
5. DFS를 수행할 때마다 start
와 sum
을 갱신하고 메소드를 빠져나올 때 다음 경우의 수를 확인하기 위해서 백트래킹을 수행한다.
6. target
노드를 제외한 나머지 노드가 모두 방문됐다면 마지막 노드에서 target
노드로 돌아올 수 있는지 확인하고 필요한 비용을 sum
에 더해서 값을 갱신한다.
7. 정답 출력을 위한 answer
와 sum
을 비교해서 sum
의 값이 더 작으면 answer
를 갱신하고 메소드를 빠져나온다.
8. 모든 노드에 대해서 외판원 순회를 진행한 후에 최종적으로 도출된 answer
값을 출력한다.
소스코드
문제링크
10971번: 외판원 순회 2
첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j
www.acmicpc.net
'Coding Test > Solved' 카테고리의 다른 글
[BOJ] 백준 2210번 - 숫자판 점프(with Java) (0) | 2022.06.30 |
---|---|
[BOJ] 백준 4963번 - 섬의 개수(with Java) (0) | 2022.06.30 |
[BOJ] 백준 11060번 - 점프 점프(with Java) (0) | 2022.06.30 |
[BOJ] 백준 2667번 - 단지번호붙이기(with Java) (0) | 2022.06.28 |
[BOJ] 백준 2606번 - 바이러스(with Java) (0) | 2022.06.28 |
댓글