求解哈密顿环问题,接下来三篇博文将从深度、广度和分支界限算法描述该问题的求解。如有问题请多多指教!
哈密顿环问题:输入是一个无向连通图G=(V,E);如果G中存在哈密顿环则输出该环,否则输出“否”。接下来用深度和广度解决哈密顿环问题,用分支限界解决最小哈密换带权问题。
深度优先,使用栈的原理存储数据,一旦找到结果就结束。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define MAX_SIZE 21
//查找回路函数
int getHamiltonPathBydepth(int graph[MAX_SIZE][MAX_SIZE],int visited[MAX_SIZE],int path[MAX_SIZE],int len,int currentlen);
//打印回路
void printVertex(int path[],int len);
void HamiltonBydepth()
{
int len,i,j;//len为点数
int graph[MAX_SIZE][MAX_SIZE];//邻接矩阵
int visited[MAX_SIZE],path[MAX_SIZE];//标记已读和路径
// double start,end;//时间变量
// CPU频率
LARGE_INTEGER li;
// 记录过程时间
LONGLONG start,end,fred;
// 获取CPU频率
QueryPerfor