额的代码:
#include<stdio.h>
#include<string.h>
#define N 11
int visit[N];
int adj[N][N];
int M;
int path_OK(int cur,int hamilton[])
{
if(visit[hamilton[cur]])
return 0;
if(cur<M)
return adj[hamilton[cur-1]][hamilton[cur]];
else
return adj[hamilton[M-1]][hamilton[M]]&&adj[hamilton[1]][hamilton[M]];
}
void dfs(int cur,int hamilton[])
{
if(cur>M)
{
for(int i=1;i<=M;i++)
printf("%d ",hamilton[i]);
printf("\n");
}
else
{
for(int i=1;i<=M;i++)
{
hamilton[cur]=i;
if(path_OK(cur,hamilton))
{
visit[i]=1;
dfs(cur+1,hamilton);
visit[i]=0;
}
}
}
}
int main()
{
memset(adj,0,sizeof(adj));
int B;int hal[N];
scanf("%d%d",&M,&B);int a,b;
for(int i=0;i<B;i++)
{
scanf("%d%d",&a,&b);
adj[a][b]=adj[b][a]=1;
}
hal[1]=1;visit[1]=1;//以其中一个点为起始点
dfs(2,hal);
return 1;
}
</