Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <algorithm>
- #include <stdio.h>
- #include <queue>
- #include <stack>
- #include <climits>
- using namespace std;
- long n, m, root, dest;
- vector <vector <long>> g;
- vector <long> stnum(1000, -1);
- vector <long> path;
- bool gamilton(long start)
- {
- long is_ = false;
- for (long i = 0; i < n && !is_; i++)
- {
- if (g[i][path[start - 1]] || g[path[start - 1]][i])
- {
- if (start == n && i == root)
- {
- is_ = true;
- }
- else if (stnum[i] == -1)
- {
- stnum[i] = start;
- path[start] = i;
- is_ = gamilton(start + 1);
- if (!is_)
- {
- stnum[i] = -1;
- }
- }
- else continue;
- }
- } return is_;
- }
- void backtrack()
- {
- for (long i = 0; i < n; i++)
- {
- printf("%ld ", path[i] + 1);
- }
- printf("%ld", root + 1);
- }
- int main()
- {
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf("%ld%ld", &n, &root);
- root--;
- g.resize(n);
- for (long i = 0; i < n; i++)
- {
- g[i].resize(n);
- for (long j = 0; j < n; j++)
- {
- scanf("%ld", &g[i][j]);
- }
- }
- path.resize(n);
- stnum.resize(n);
- path[0] = root;
- stnum[root] = root;
- if (gamilton(1) != 0)
- {
- backtrack();
- }
- else
- {
- printf("-1");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement