[백준 2098번] 외판원 순회
2018. 1. 9. 17:53ㆍ알고리즘/백준
반응형
소스코드
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 32 | #include <iostream> using namespace std; #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) int n, w[17][17], memo[17][1 << 16]; int tsp(int cur, int visited) { if (visited == (1 << n) - 1) // 모두 방문한 경우 return w[cur][0] ? w[cur][0] : 987654321; int &ret = memo[cur][visited]; if (ret != -1) return ret; // 이미 계산한 값이 있을 경우 ret = 987654321; for (int i = 0; i < n; i++) { if (visited & (1 << i)) continue; // i번째 지역을 방문한 경우 if (w[cur][i] == 0) continue; // 해당 지역이 0인 경우 (자기 지역으로 가는건 비용이 0) ret = MIN(ret, tsp(i, visited | (1 << i)) + w[cur][i]); // 현재 지점에서 i지점으로 이동 체크와 비용 가산 } return ret; } int main() { cin >> n; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> w[i][j]; for (int i = 0; i < n; i++) for (int j = 0; j < 1 << 16; j++) memo[i][j] = -1; cout << tsp(0, 1) << '\n'; return 0; } | cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 3034번] 앵그리 창영 (0) | 2018.01.10 |
---|---|
[백준 5554번] 심부름 가는 길 (0) | 2018.01.10 |
[백준 4796번] 캠핑 (0) | 2018.01.09 |
[백준 10799번] 쇠막대기 (0) | 2018.01.05 |
[백준 10798번] 세로읽기 (0) | 2018.01.02 |