哈密顿环

简介:   设G=(V,E)是一个n结点的连通图。一个哈密顿环是一条沿着图G的n条边环行的路径,它访问每个结点一次并且返回到它的开始位置。换言之,如果一个哈密顿环在某个结点v1∈V处开始,且G中结点按照v1,v2,…,Vn+l的次序被访问,则边(Vi,Vi+1),1≤i≤n,均在图G中,且除了v1和vn+l是同一个结点外,其余的结点均各不相同。

  设G=(V,E)是一个n结点的连通图。一个哈密顿环是一条沿着图G的n条边环行的路径,它访问每个结点一次并且返回到它的开始位置。换言之,如果一个哈密顿环在某个结点v1∈V处开始,且G中结点按照v1,v2,…,Vn+l的次序被访问,则边(Vi,Vi+1),1≤i≤n,均在图G中,且除了v1和vn+l是同一个结点外,其余的结点均各不相同。

  用向量(x1, …, xn)表示用回溯法求得的解,其中xi是找到的环中第i个被访问的结点。如果已选定x1, …, xk-1,那么下一步要做的工作是如何找出可能作Xk的结点集合。若k=l,则X(1)可以是这n个结点中的任一结点,但为了避免将同一个环重复打印n次,可事先指定X(l)=1。若1<k<n,则X(k)可以是不同于X(1),X(2), …, X(k-1)且和X(k-1)有边相连的任一结点v。X(n)只能是唯一剩下的且必须与X(n-1)和X(1)皆有边相连的结点。

 

  过程NextValue给出了在求哈密顿环的过程中如何找下一个结点的算法。

生成下一个结点,代码如下:

void NextValue(int k) {
//X(l),…,X(k-1)是一条有k-l个不同结点的路径。若X(k)=0,则表示再无结
//点可分配给X(k)。若还有与X(1),…,X(k-1)不同且与X(k-1)有边相连结的
//结点则将其中标数最高的结点置于X(k)。若k=n,则还需与X(1)相连结。
int n,X[n];bool Graph[n][n]; // n、X[n]定义成全局变量
int k,j;
while(1) {
X[k]=(x[k] + 1) mod (m+1) //下一个结点
if(X[k]==0) { return;}
if(Graph[X[k-1]],X[k]) { //有边相连吗
for(j=1;j<=k-1;++j) { //检查与前k-1个结点是否相同
if(X[j]==X[k]) break//有相同结点,出此循环
};//for
if(j==k) { //若为真,则是一个不同结点
if((k<n) or (k==n and Graph[X[n]],[1] ) return;
};//if
};//if
}//while
}//NextValue

使用过程NextValue和将递归回溯算法细化得到算法Hamiltonian。此算法可找出所有的哈密顿环。

 

找所有的哈密顿环,代码如下:

void Hamiltonian(int k) {
//这是找出图G中所有哈密顿环的递归算法。图G用它的布尔邻接矩阵
//Graph(1..n,1..n)表示。每个环都从结点 1开始。
int X[n]; //X[n]定义成全局变量
int k,n;
while(1) { //生成X(k)的值
NextValue(k); //下一个合法结点分配给X(k)
if(x[k]==0) returnif(k==) { print(X,’1’);} //打印一个环
else { Hamiltonian(k+1)}
//if
}//repeat
}//Hamiltonian

这个过程首先初始化邻接矩阵Graph(l..n,l..n),然后置X(2:n)=0,X(l)=l,再执行Hamiltonian(2)

 

 

 

 

 

相关文章
|
传感器 安全 API
SCP Firmware入门一篇就够啦
SCP Firmware入门一篇就够啦
1006 0
|
缓存 网络协议 Linux
计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)
Wireshark软件使用与协议分析 ARP协议分析 使用 Wireshark 抓取局域网的数据包并进行分析: 1. 学习 Wireshark 基本操作:重点掌握捕获过滤器和显示过滤器。 2. 观察 MAC 地址:了解 MAC 地址的组成,辨识 MAC 地址类型。 3. 分析以太网帧结构:观察以太网帧的首部和尾部,了解数据封装成帧的原理。 4. 分析 ARP 协议:抓取 ARP 请求和应答报文,分析其工作过程。 IP与ICMP分析 启动 Wireshark,捕捉网络命令执行过程中本机接受和发送的数据报。
2440 0
计算机网络——Wireshark软件使用与协议分析(ARP协议、IP与ICMP分析)
|
6月前
|
数据采集 分布式计算 监控
月之暗面Kimi大模型海量数据预处理实践
加速大模型的训练迭代,在模型数据预处理方面,需要高性价比、弹性灵活的 CPU 和 GPU 算力满足模型迭代的业务实践。
|
应用服务中间件 开发工具 nginx
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端
Mac M1/M2/M3 芯片环境配置以及常用软件安装-前端 最近换了台新 Mac,所有的配置和软件就重新安装下,顺便写个文章。
1128 1
|
10月前
|
人工智能 安全 网络安全
揭秘!大模型私有化部署的全方位安全攻略与优化秘籍,让你的AI项目稳如磐石,数据安全无忧!
【10月更文挑战第24天】本文探讨了大模型私有化部署的安全性考量与优化策略,涵盖数据安全、防火墙配置、性能优化、容器化部署、模型更新和数据备份等方面,提供了实用的示例代码,旨在为企业提供全面的技术参考。
707 6
|
数据采集 监控 数据可视化
装备制造行业云MES解决方案
万界星空科技装备制造云MES解决方案,通过采集生产过程中的质量、设备、工艺、物料、检测等数据,为装备制造大数据分析平台的建立提供数据支持,同时,通过多个层面优化生产管理模式,将为装备制造企业实现信息平台一体化;生产计划高效协同;生产数据可视化;质量过程可追溯;生产与管理集成系统最优化。
660 0
|
12月前
|
存储 编解码 算法
4K 蓝光与流媒体比较:哪个更好?
4K 蓝光提供无与伦比的图像和声音质量,使其成为重视沉浸式电影体验的爱好者的首选。另一方面,流媒体服务提供了触手可及的庞大内容库,可随时随地访问。在这篇文章中,我们将深入探讨每个选项的好处并提供全面的比较,以帮助你决定哪个更适合您的观看习惯和偏好。
679 3
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
1151 0
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
394 0
|
机器学习/深度学习 数据采集 Python
独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn
独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn
1084 1
独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn