回溯法解hamilton回路问题
来源:互联网 发布:电信光纤网络 编辑:程序博客网 时间:2024/06/10 10:43
/*
回溯法求解hamilton回路问题
int n; 顶点个数
int x[n]; hamilton回路上的顶点编号
bool c[n][n]; 图的邻接矩阵
bool s[n]; 若对应顶点已处于搜索路径上则为真
*/
void CBacktrack::hamilton(int n, int x[], bool c[][5])
{
int i,k;
bool *s=new bool[n];
for(i=0;i<n;i++)
{
x[i]=-1;
s[i]=false;
}
k=1;
s[0]=true;
x[0]=0;
while(k>=0)
{
x[k]=x[k]+1;
while(x[k]<n)
{
if((!s[x[k]]) && c[x[k-1]][x[k]])
break;
else
x[k]=x[k]+1;
}
if((x[k]<n) && (k!=n-1))
{
s[x[k]]=true;
k=k+1;
}
else if((x[k]<n) && (k==n-1) && (c[x[k]][x[0]]))
break;
else
{
x[k]=-1;
k=k-1;
s[x[k]]=false;
}
}
delete []s;
s=NULL;
}
void main()
{
/////////////////////////////////////////////
//////// 回溯法求解n皇后问题 ////////////
int x[5]; //x[1......5-1]
const int n=5;
bool c[n][n]={{0,1,0,1,0},{1,0,1,1,1},{0,1,0,1,1},{1,1,1,0,1},{0,1,1,1,0}};
CBacktrack m_Backtrack;
m_Backtrack.hamilton(n,x,c);
for(int i=0;i<n;i++)
cout<<x[i]<<" ";
getchar();
return 0;
}
- 回溯法解hamilton回路问题
- 回溯法解hamilton回路问题
- 趣题:一个与Hamilton回路有关的问题
- Hamilton-哈密顿回路
- 初学回溯,哈密尔顿回路问题的实现
- 回溯——哈密顿回路问题
- 回溯法,回溯法解装载问题
- 基于回溯法寻找哈密顿回路
- Hamilton
- 回溯法解装载问题
- 回溯法解背包问题
- 回溯法解装载问题
- 回溯法解迷宫问题
- 回溯法解迷宫问题
- AGC018:Tree and Hamilton Path(dfs & 树 哈密尔顿回路)
- SHU2011 Granny's Bike(哈密顿回路+回溯法)
- 马的Hamilton周游路线问题
- 马的Hamilton周游路线问题
- 回溯法求解m着色问题
- 希尔排序
- 单片机驱动DM9000网卡芯片(详细调试过程)【上和下】
- 改变
- 回溯法解hamilton回路问题
- 回溯法解hamilton回路问题
- jBPM环境搭建
- 网站制作十条经验总结
- Rs232 与Rs485
- 我眼中的商业软件开发
- java 数组扩容
- 汇编语言--十进制输入输出
- 第10章 类---《C++程序设计语言(特别版)》
- android和iphone 那些事