fork download
  1. #include <bits/stdc++.h>
  2. #define INF 1000001
  3. using namespace std;
  4. int N, tmp;
  5. //각 도시간 이동하는데 드는 비용
  6. int costs[10][10];
  7.  
  8. //인자 : 방문여부, 현재까지 든 비용, 이전 위치(도시), 이동한 도시 수, 시작한 도시
  9. int shortest(vector<bool>& visited, int cost, int prev, int size, int first) {
  10. if(size == N) return min(INF, cost+costs[prev][first]);
  11. int ret = INF;
  12. for(int i = 0; i < N; i++) {
  13. if(visited[i]) continue;
  14. visited[i] = true;
  15. ret = min(shortest(visited, cost+costs[prev][i], i, size+1, first), ret);
  16. visited[i] = false;
  17. }
  18. return ret;
  19. }
  20.  
  21. int main() {
  22. int cmp = INF;
  23. cin.sync_with_stdio(false);
  24. cin >> N;
  25. vector<bool> visited(N, false);
  26. for(int i = 0; i < N; i++) {
  27. for(int j = 0; j < N; j++) {
  28. cin >> tmp;
  29. if(tmp == 0){
  30. costs[i][j] = INF;
  31. }
  32. else {
  33. costs[i][j] = tmp;
  34. }
  35. }
  36. }
  37. //시작 도시 정하기
  38. for (int i = 0; i < N; i++) {
  39. visited[i] = true;
  40. cmp = min(cmp, shortest(visited, 0, i, 1, i));
  41. visited[i] = false;
  42. }
  43. cout << cmp;
  44. }
Success #stdin #stdout 0s 4404KB
stdin
2
0 1000000
1000000 0
stdout
1000001