状态压缩求哈密顿回路
#include<bits/stdc++.h>
using namespace std;
bool dp[23][1<<21];
char s[22][22];
bool vis[35];
int ans[25];
int n,f=0;
bool dfs(int now,int cur,int cnt)
{
ans[cnt]=now;
if(cnt==n)
{
if(s[now][1]=='W'||s[1][now]=='L')
{
f=1;
for(int i=1;i<n;i++)
{
cout<<ans[i]<<' ';
}
cout<<ans[n]<<endl;
return 1;
}
return 0;
}
int x=1;
for(int i=2;i<=n;i++)
{
x<<=1;
int st=cur|x;
if(!vis[i]&&(s[now][i]=='W'||s[i][now]=='L')&&!dp[i][st])
{
vis[i]=1;
if(dfs(i,st,cnt+1))
return 1;
vis[i]=0;
}
dp[i][st]=1;
}
return 0;
}
int main()
{
//int n;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cin>>s[i][j];
}
vis[1]=1;
dfs(1,1,1);
if(f==0)
cout<<"No Solution"<<endl;
}