默认以1为初始节点,生成2到N的全排列,验证1--排列--1是否为哈密顿回路。
1、从2到N进行全排列
2、对每一个排列进行验证是否是哈密顿回路
void f1()
{
int V[N+2],num=1;
for(int i=1;i<=N;i++) V[i]=i;
V[N+1]=V[1];
for(int i=1;i<=N;i++) num*=E[ V[i] ][ V[i+1] ];//先对1到n这个排列进行验证
if(num)
{
tot1++;
// for(int i=1;i<=N+1;i++) printf(i==1?"%d":"--%d",V[i]);
// cout<<"是一条哈密顿回路"<<endl;
}
while(next_permutation(V+1,V+1+N))
{
if(V[1]!=1) break;//保证这条通路是从点1开始的
num=1;
for(int i=1;i<=N;i++) num*=E[ V[i] ][ V[i+1] ];//验证
if(num)
{
tot1++;
// for(int i=1;i<=N+1;i++) printf(i==1?"%d":"--%d",V[i]);
// cout<<"是一条哈密顿回路"<<endl;
}
}
}