#include <bits/stdc++.h>
using namespace std;
const int N = 5;
bool Hamiltonian_path(
vector<vector<int> >& adj, int N)
{
int dp[N][(1 << N)];
memset(dp, 0, sizeof dp);
for (int i = 0; i < N; i++)
dp[i][(1 << i)] = true;
for (int i = 0; i < (1 << N); i++) {
for (int j = 0; j < N; j++) {
if (i & (1 << j)) {
for (int k = 0; k < N; k++) {
if (i & (1 << k)
&& adj[k][j]
&& j != k
&& dp[k][i ^ (1 << j)]) {
dp[j][i] = true;
break;
}
}
}
}
}
for (int i = 0; i < N; i++) {
if (dp[i][(1 << N) - 1])
return true;
}
return false;
}
int main()
{
vector<vector<int> > adj = { { 0, 1, 1, 1, 0 },
{ 1, 0, 1, 0, 1 },
{ 1, 1, 0, 1, 1 },
{ 1, 0, 1, 0, 0 } };
int N = adj.size();
if (Hamiltonian_path(adj, N))
cout << "YES";
else
cout << "NO";
return 0;
}
Original page link
Best Cool Tech Gadgets
Top favorite technology gadgets
0 comments:
Post a Comment