Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <stdio.h>
  5. #include <queue>
  6. #include <stack>
  7. #include <climits>
  8.  
  9. using namespace std;
  10.  
  11. long n, m, root, dest;
  12. vector <vector <long>> g;
  13. vector <long> stnum(1000, -1);
  14. vector <long> path;
  15.  
  16. bool gamilton(long start)
  17. {
  18.     long is_ = false;
  19.     for (long i = 0; i < n && !is_; i++)
  20.     {
  21.         if (g[i][path[start - 1]] || g[path[start - 1]][i])
  22.         {
  23.             if (start == n && i == root)
  24.             {
  25.                 is_ = true;
  26.             }
  27.             else if (stnum[i] == -1)
  28.             {
  29.                 stnum[i] = start;
  30.                 path[start] = i;
  31.                 is_ = gamilton(start + 1);
  32.                 if (!is_)
  33.                 {
  34.                     stnum[i] = -1;
  35.                 }
  36.             }
  37.             else continue;
  38.         }
  39.     }   return is_;
  40. }
  41.  
  42. void backtrack()
  43. {
  44.     for (long i = 0; i < n; i++)
  45.     {
  46.         printf("%ld ", path[i] + 1);
  47.     }
  48.     printf("%ld", root + 1);
  49. }
  50.  
  51. int main()
  52. {
  53.     freopen("input.txt", "r", stdin);
  54.     freopen("output.txt", "w", stdout);
  55.     scanf("%ld%ld", &n, &root);
  56.     root--;
  57.     g.resize(n);
  58.     for (long i = 0; i < n; i++)
  59.     {
  60.         g[i].resize(n);
  61.         for (long j = 0; j < n; j++)
  62.         {
  63.             scanf("%ld", &g[i][j]);
  64.         }
  65.     }
  66.     path.resize(n);
  67.     stnum.resize(n);
  68.     path[0] = root;
  69.     stnum[root] = root;
  70.     if (gamilton(1) != 0)
  71.     {
  72.         backtrack();
  73.     }
  74.     else
  75.     {
  76.         printf("-1");
  77.     }
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement