Hamilton
import java.util.Vector; class Hamilton
{
int start;
int a[][];
int len;
int x[]; // 记录回路
boolean flag; public Hamilton(int[][] a, int n, int start)
{
this.a = a;
this.len = n;
this.flag = false;
this.x = new int[n];
this.start = start - 1;
} public boolean isComplete(int k)
{
return a[x[k - 1]][x[0]] == 1;
} public Vector<Integer> makeIterms(int k)
{
Vector<Integer> iterms = new Vector<Integer>();
if (k == 0)
{
iterms.add(start);
} else
{
for (int i = 0; i < len; i++)
if (a[x[k - 1]][i] == 1) // 相当重要
iterms.add(i);
}
return iterms; // 第k-1层结点的所有临界点
} public void printSolution(int k)
{
System.out.print(x[0] + 1);
for (int i = 1; i < len; i++)
System.out.print("->" + (x[i] + 1));
System.out.println("->" + (x[0] + 1));
} public boolean isPartial(int k)
{
for (int i = 0; i < k; i++)
if (x[i] == x[k])
return false;
return true;
}
} class General
{
// 回溯算法的引导框架
public static void backtrack(Hamilton p)
{
explore(p, 0);
if (!p.flag)
System.out.println("no sulution!");
}
// 回溯算法的探索框架
private static void explore(Hamilton p, int k)
{
if (k >= p.len)
{
if (p.isComplete(k))
{
p.flag = true;
p.printSolution(k);
}
return;
}
Vector<Integer> iterms = p.makeIterms(k);
for (int i = 0; i < iterms.size(); i++)
{
p.x[k] = iterms.get(i);
if (p.isPartial(k))
explore(p, k + 1);
}
} } public class Test
{ public static void main(String args[])
{
int c[][] = { { 0, 1, 1, 1, 0 }, { 1, 0, 1, 0, 1 }, { 1, 1, 0, 1, 0 },
{ 1, 0, 1, 0, 1 }, { 0, 1, 0, 1, 0 } }; Hamilton p;
p = new Hamilton(c, 5, 1);
General.backtrack(p);
}
}
Hamilton的更多相关文章
- Hamilton四元数群的表示
Hamilton四元数群$Q_8=\mathbb H=\{\pm e,\pm i,\pm j,\pm k\}$满足如下运算法则: $e$为单位元且同号得正.异号得负,此外$e=i^2=j^2=k^2, ...
- Hamilton回路的判定与构造
定理1:在一个具有n个顶点的无向连通图G中,如果任意两个顶点的度数之和大于n,则G具有Hamilton回路.此条件为充分条件 定理2:设图G = <V,E>,是Hamilton图,则对于v ...
- 【算法】深度优先 马走日 Hamilton routes
在n*m的棋盘中,马只能走“日” 字.马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次.找出所有路径. ××××××××××××× 类似问题: 在半个中国象棋棋盘上,马在左下角(1,1)处 ...
- 『最短Hamilton路径 状态压缩DP』
状压DP入门 最短Hamilton路径 Description 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamil ...
- 最短Hamilton路径【状压DP】
给定一张 nn 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. 输入 ...
- 位运算 - 最短Hamilton路径
给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次. 输入格 ...
- 关于Hamilton问题的研究
关于Hamilton问题的研究 首先介绍一下Hamilton问题:哈密顿问题寻找一条从给定的起点到给定的终点沿途恰好经过所有其他结点一次的路径.(摘自百度百科) 从刚开始学OI买了信息学一本通,这个问 ...
- CH0103最短Hamilton路径 & poj2288 Islands and Brigdes【状压DP】
虐狗宝典学习笔记: 取出整数\(n\)在二进制表示下的第\(k\)位 \((n >> ...
- 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)
本文链接:http://www.cnblogs.com/Ash-ly/p/5452580.html 概念: 哈密顿图:图G的一个回路,若它通过图的每一个节点一次,且仅一次,就是哈密顿回路.存在哈密顿回 ...
随机推荐
- PHP 使用用户自定义的比较函数对数组中的值进行排序
原文:PHP 使用用户自定义的比较函数对数组中的值进行排序 usort (PHP 4, PHP 5) usort — 使用用户自定义的比较函数对数组中的值进行排序 说明 bool ...
- Swift 制作一个新闻通知中心插件1
使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...
- Visual Studio Contact
Visual Studio Contact(); 直播笔记 昨天微软干了几件了不起的事:.NET开发环境将开源.跨平台支持(Mac OS X和Linux).多设备支持(WP.Android和iOS ...
- firefox 对WebRTC支持
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. firefox pc和android 最新版本号已经默认支持webrtc, 同一时候,firefox在支持V ...
- 使用Windows2003创建DNS服务器 - 进阶者系列 - 学习者系列文章
Windows 2003的DNS服务器的配置还是比较简单的.下面简要介绍下DNS服务器的配置. 1. 打开控制面板,选择 添加删除Windows组件,选择 网络服务 ,选择 详细信息,选择 域名 ...
- 解决IIS7 HTTP/405 Method Not Allowed 问题的方法.
1.处理程序映射 2.添加脚本映射 3.请求路径:*.html 4.可执行文件:C:/windows/system32/inetsrv/asp.dll 5.请求限制-谓词:输入需要允许请求的谓词(po ...
- CentOS 5.8安装SugarCRM 6.5版本
环境:CentOS 5.8,安装了Asterisk 1.8 升级php到5.2SugarCRM 6.5: Minimum PHP version required is 5.2.0. You are ...
- 【转】Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9671609 记得在很早之前,我写了一篇关于Android滑动菜单的文章,其中有一个 ...
- psql: FATAL: role “postgres” does not exist 解决方案
当时想做的事情,是运行一个创建数据库的脚本.找到的解决方案差不多和下面这个链接相同. http://stackoverflow.com/questions/15301826/psql-fatal-ro ...
- 传说中的WCF(1):这东西难学吗?
WCF难学吗? 是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问. 也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了.”也许,人类开生就摆脱不了一种习性——懒惰:不过,也 ...