默认以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;
}
}
}
本文介绍了一种算法,通过从2到N生成所有排列,并逐一验证是否形成哈密顿回路,以确定起始于1的路径。算法首先固定起点,然后遍历所有可能的排列并计算相关系数,确认是否构成完整的回路。
8404

被折叠的 条评论
为什么被折叠?



