做了这个题,才知道汉密尔顿回路,从每个点出发只经过一个点又回到原点有共有60种方案
#include<bits/stdc++.h>
using namespace std;
int a[25][25];
int vis[25];
int n;
void dfss(int x)
{
if(vis[x]==n)
{
cout<<x;
return ;
}
else
{
dfss(vis[x]);
cout<<' '<<x;
}
}
int kase;
void dfs(int x,int cot)
{
int i,j;
if(cot==20&&x==n)
{
printf("%d: %d ",++kase,n);
dfss(n);
cout<<endl;
return;
}
for(i=1;i<=20;i++)
{
if(a[x][i]&&(!vis[i]))
{
vis[i]=x;
dfs(i,cot+1);
vis[i]=0;
}
}
}
int main()
{
int i,j;
int x,y,z;
memset(a,0,sizeof(a));
for(i=1;i<=20;i++)
{
cin>>x>>y>>z;
a[i][x]=1;
a[i][y]=1;
a[i][z]=1;
}
while(cin>>n&&n)
{
kase=0;
memset(vis,0,sizeof(vis));
dfs(n,0);
}
}