哈密尔顿环路问题
来源:互联网 发布:制作搞笑图片软件 编辑:程序博客网 时间:2024/06/09 23:04
额的代码:
#include<stdio.h>#include<string.h>#define N 11int 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;}
书上的回溯模板:(伪代码)
hamilton(adj,x){ x[1]=1 visit[1]=1 for i=2 to n visit[i]=0; rhamilton(adj,2,x)} rhamilton(adj,k,x){ for x[k]=2 to n if(path_ok(adj,k,x)){ visit[x[k]]=1; if(k==n||rhamilton(adj,k+1,x)) return 1; visit[x[k]]=0 } return 0} path_ok(adj,k,x){ if(visit[x[k]]) return 0; if(k<n) return adj[x[k-1]][x[k]] else return adj[x[n-1]][x[n]]&&adj[x[n]][x[1]]}
0 0
- 哈密尔顿环路问题
- 哈密尔顿回路问题
- 数字电路地线环路问题
- 图的环路问题
- 高灵敏度环路问题
- 初学回溯,哈密尔顿回路问题的实现
- 从哈密尔顿路径谈NP问题
- Tour-Guide解题报告 - 哈密尔顿环问题
- 从哈密尔顿路径谈NP问题
- 交换机环路问题一例
- 交换机环路问题一例
- ospf虚链路环路问题-1
- 图论问题--求哈密尔顿回路的问题
- 哈密尔顿回路
- 哈密尔顿回路
- 哈密尔顿环
- 哈密尔顿环
- 单向链表当中的环路判别问题
- Xilinx System Generator模块中各个常见选项的含义
- mybatis-sql小结
- LintCode:N皇后问题
- Android 修改开机动画(bootanimation)
- UVA 11500
- 哈密尔顿环路问题
- HDU 1711 Number Sequence
- PHP项目开发流程
- struct stat结构体简介
- C++标准库,标准程序库,标准模板库之间是什么关系(重要!!!)
- 阅读
- [打字练习]Day Five
- Linux内存管理之一 分段与分页
- 《JavaScript学习笔记》:冒泡及取消冒泡