hdu 2181 哈密顿绕行世界问题
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int mp[25][25],vis[25],ans[25],sum;
void dfs(int now,int cnt)
{
//printf(" %d\n",ans[0]);
int i;
if(cnt==21)
{
if(ans[20]!=ans[0]) return;
sum++;
printf("%d: ",sum);
for(i=0; i<20; i++)
printf(" %d",ans[i]);
printf(" %d\n",ans[20]);
return;
}
else
{
for(i=1; i<=20; i++)
{
if(mp[i][now]==1&&vis[i]==0)
{
vis[i]=1;
ans[cnt]=i;
dfs(i,cnt+1);
vis[i]=0;
}
}
}
return ;
}
int main()
{
int i,a,b,c,n;
memset(mp,0,sizeof(mp));
for(i=1; i<=20; i++)
{
scanf("%d%d%d",&a,&b,&c);
mp[c][i]=mp[b][i]=mp[a][i]=mp[i][c]=mp[i][b]=mp[i][a]=1;
}
while(~scanf("%d",&n)&&n)
{
memset(vis,0,sizeof(0));
sum=0;
//vis[n]=1;
ans[0]=n;
dfs(n,1);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/