Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 네트워크플로우
- 시뮬레이션
- 다익스트라
- DFS
- 완전탐색
- YBMCOS
- BFS
- 게더타운시작
- QUICKSTARTGUIDE
- GatherTown
- 취득후기
- 우선순위큐
- 재귀함수
- 다이나믹프로그래밍
- COSPROJAVA1급
- COSPRO
- deque
- 이젠 골드구현도 어렵네..
- dp
- 구현
- 자바PS
- PS
- 세그먼트트리
- java
- 엘라스틱서치
- 알고리즘
- 백준
- spring
- 01BFS
- 백준코딩테스트
Archives
- Today
- Total
공부공간
BOJ - 10971 ) 외판원 순회2 본문
https://www.acmicpc.net/problem/10971
10971번: 외판원 순회 2
첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다. 항상 순회할 수 있는 경우만 입력으로 주어진다.
www.acmicpc.net
외판원순회(TSP)문제는 한지점에서 출발해 모든 노드를 거치고 다시 시작위치로 돌아오는 문제를 말한다.
그 중 최소 비용을 출력하는 것이 이번 외판원문제2이다.
백트래킹을 이용하여 미리구한값보다 크다면 더이상진행하지않는다.
문제에서도 알수 있듯이, MAP[I][J]값이 0이면 I->J로가는 경로가 없는 것이므로 진행할 수 없다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class TSP2 {
public static int N , map[][] , answer = 987654321;
public static boolean visit[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
map= new int[N][N];
visit = new boolean[N];
for(int i = 0 ; i < N ; i++) {
st = new StringTokenizer(br.readLine());
for(int j= 0 ; j < N ; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i = 0 ; i <N ; i++) {
visit[i] = true;
dfs(i,0,i,0);
visit[i] = false;
}
System.out.println(answer);
}
private static void dfs(int now, int cnt , int begin , int value) {
if( value > answer) return;
if(cnt == N-1 && map[now][begin] !=0) {
// 모든 경우 순회
answer = value + map[now][begin] > answer ? answer :value + map[now][begin] ;
return;
}
for(int i = 0 ; i < N ; i++) {
if(cnt < N-1 && i==begin) continue;
if(now == i) continue;
else if(!visit[i] && map[now][i] !=0) {
visit[i] = true;
dfs(i,cnt+1,begin,value+map[now][i]);
visit[i] = false;
}
}
}
}
'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글
BOJ - 16236 ) 아기상어 (0) | 2020.05.13 |
---|---|
BOJ - 2234 ) 성곽 (0) | 2020.05.07 |
BOJ - 17244 ) 아맞다우산 (0) | 2020.05.06 |
BOJ - 17836 ) 공주님을 구해라! (0) | 2020.04.29 |
BOJ - 3109 ) 빵집 (0) | 2020.04.19 |
Comments