Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <iostream>
  2. #define inf 9223372036854775807
  3.  
  4. using namespace std;
  5. int n;
  6. long long ans[19][1 << 19];
  7. long long g[19][19];
  8.  
  9. int main() {
  10. cin >> n;
  11. long long i, j, a, k;
  12. for(k = 0; k < n; k++){
  13. for(int l = 0; l < n; l++){
  14. cin >> g[k][l];
  15. }
  16. }
  17.  
  18. for (i = 0; i < n; i++) {
  19. ans[i][1 << i] = 0;
  20. }
  21.  
  22.  
  23. for (a = 1; a < (1 << n) - 1; a++) {
  24. for (j = 0; j < n; j++) {
  25. if ((a & (1 << j)) == 0) {
  26. ans[j][a | (1 << j)] = inf;
  27. for (k = 0; k < n; k++) {
  28. if ((a & (1 << k)) != 0) {
  29. if (ans[j][a | (1 << j)] > ans[k][a] + g[k][j]) {
  30. ans[j][a | (1 << j)] = ans[k][a] + g[k][j];
  31. }
  32. }
  33. }
  34. }
  35. }
  36. }
  37.  
  38. long long minp = inf;
  39. int p, last = 0;
  40. for( p = 0; p < n; p++){
  41. if(ans[p][(1 << n) - 1] < minp){
  42. minp = ans[p][(1 << n) - 1];
  43. last = p;
  44. }
  45. }
  46.  
  47. cout << minp << endl;
  48. i = last;
  49. j = ((1 << n) - 1);
  50. cout << last + 1 << " " << endl;
  51. for (j ^= (1 << i); j > 0; ) {
  52. for (k = 0; k < n; k++) {
  53. if ((j & (1 << k)) != 0) {
  54. if (ans[k][j] == ans[k][j ^ (1 << k)] + g[k][i]) {
  55. cout << k + 1 << " ";
  56. i = k;
  57. j ^= (1 << k);
  58. break;
  59. }
  60. }
  61. }
  62. }
  63.  
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement