티스토리 뷰

알고리즘

백준 - 외판원 순회2

koyuchang 2021. 3. 14. 17:40

문제 출처: www.acmicpc.net/problem/10971

 

10971번: 외판원 순회 2

첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j

www.acmicpc.net

백트래킹을 이용해서 순회를 완료하면 이전 노드로 돌아가서 다시 새로운 경로를 찾아서 최소의 비용을 도출하는 것이 관건인 문제다.

 

백트래킹을 편리하게 하기 위해 우선 입력 값들을 ArrayList배열에 넣어서 사용하였다. 여기서 문제가 발생했는데 뒤에 풀이를 하면서 언급하겠다.

 

ArrayList배열에 다음 이동점의 노드 번호, 다음 노드와의 비용 값을 넣기 위해 Point클래스를 만들었다.  그리고 이중 for문을 이용하여 입력값을 받았다.

 

 

리스트에 입력값 넣기

 

그리곤 각 노드마다 DFS를 통해 최소 비용을 찾았다! DFS코드에 들어가기 전에 우선 방문 체크를 해주었고(boolean형 배열을 사용)

해당 노드에서 시작한 DFS가 끝나면 방문을 풀어주었다.

 

 

 

 

 

DFS로직은 매우 간단하다. 방문한 배열은 다시 방문해서는 안되지만, 처음 시작 노드는 다시 방문해야 하므로 총 노드 개수가 N개일 경우, N-1 노드까지 왔으면(매번 DFS를 통해 다음 노드로 이동할 때마다 count+1을 해주었다.) 처음 시작 노드가 방문 가능한지 확인하였고, 방문이 가능하면 최소 비용을 계산하였다.

 

 

 

 

여기서!! 위에서 말한 문제점에 대해 말하겠다. 문제점이라기 보다는 내 부주의(?)로 발생한 문제였다. 초반에 리스트에 값을 입력할 때 0이면 아예 입력을 못하게 했는데 그렇게 하면 안 된다. 그러면 갈 수 있는 노드인지 못 가는 노드인지 판별이 불가능하다.

 

 

전체 코드

 

 

 

'알고리즘' 카테고리의 다른 글

백준 - 달팽이  (0) 2021.04.05
백준 - 암호 만들기  (0) 2021.03.26
백준 - 동전0  (0) 2021.02.13
프로그래머스 -단속카메라  (0) 2021.02.04
프로그래머스 - 가장 먼 노드  (0) 2021.02.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함