rt,挂了2个点,没有具体数据,但正确的输出都不是无解.
拜谢qwq
3 3
1 2
2 3
3 1
1 2 3
#include <bits/stdc++.h>
using namespace std;
const int N = 25, M = (1 << 20) + 5;
int n, m, lst[M];
bool e[N][N], dp[M];
vector<int> Ans;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
if (n == 1) cout << "1\n", exit(0);
for (int i = 1; i <= m; i++) {
int u, v; cin >> u >> v;
e[u][v] = 1;
}
for (int s = 1; s <= n; s++) {
memset(dp, 0, sizeof(dp)), memset(lst, -1, sizeof(lst));
lst[0] = s;
for (int i = 0; i < (1 << n); i++) {
if (lst[i] == -1) continue;
int j = lst[i];
for (int k = 1; k <= n; k++) {
if (!e[j][k] || ((i >> (k - 1)) & 1)) continue;
if (__builtin_popcount(i) < n - 1 && k == s) continue;
dp[i ^ (1 << (k - 1))] = 1, lst[i ^ (1 << (k - 1))] = k;
}
}
if (dp[(1 << n) - 1]) {
int i = (1 << n) - 1;
while (__builtin_popcount(i))
Ans.push_back(lst[i]), i ^= (1 << (lst[i] - 1));
for (int j = Ans.size() - 1; j >= 0; j--) cout << Ans[j] << ' ';
return 0;
}
}
cout << "No Answer\n";
return 0;
}