⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hamilton.cpp

📁 简单写了个一个哈密顿回路
💻 CPP
字号:
#include <iostream>
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 
#include "windows.h"
// #include <mmsystem.h>
// #pragma comment(lib,"winmm.lib") 
// 


using namespace std;
#define MAX  15

int **a;
int *visited = new int[MAX];
int * path = new int[MAX];
int sum = 99999;
int v;
int *minipath = new int[MAX];



void DFSBack()
{
	int s = 0;
	for (int i = 1; i < MAX; i++)
	{
		s+= a[path[i-1]][path[i]];
	}
	s+= a[path[i-1]][path[0]];
	if (s < sum)
	{
		sum = s;
		for (int j = 0; j < MAX; j++)
		{
			minipath[j] = path[j];
		}
	}
}


void DFS(int index)
{
	if (index == MAX)
	{
		DFSBack();
		return;
	}
	else
	{
		for (int i = 0; i < MAX; i++)
		{
			if (visited[i]==0 && a[index][i]!=0)
			{
				path[index] = i;

				v+=a[path[index-1]][i];
				if (v > sum)
				{
					v -= a[path[index-1]][i];
					continue;
				}

				visited[i] = 1;				
				DFS(index+1);
				visited[i] = 0;
				
				v -= a[path[index-1]][i];
			}
		}
	}
}



void main()
{
//	DWORD start = timeGetTime(); 

	int i;
	a = new int*[MAX];
	for (i = 0; i < MAX; i++)
	{
		a[i] = new int[MAX];
		visited[i] = path[i] = 0;
	}

	int array[][MAX] = {{1,2,3,4,6,8},
		{1,2,3,1,5,4},
		{3,2,1,2,3,1},
		{1,2,3,1,5,4},
		{1,2,3,1,5,4},
		{1,2,3,1,5,4}};
// 
// 	for (i = 0; i < MAX; i++)
// 	{
// 		for (int j = 0; j <MAX; j++)
// 		{
// 			a[i][j] = array[i][j];
// 		}		
// 	}
// 	
	srand(time(NULL)); 
	for (i = 0; i < MAX; i++)
	{
		for (int j = 0; j <MAX; j++)
		{			
			int r = 1 + rand()%MAX;
			a[i][j] = r;
		}
	}



	path[0] = 0;
	visited[0] = 1;

	DFS(1);

	for (i = 0; i < MAX; i++)
	{
		cout<<minipath[i]<<" ";
	}
	cout<<endl;
	
	for (i = 0; i < MAX; i++)
	{
		cout<<a[minipath[i]][minipath[(i+1+MAX)%MAX]]<<" ";
	}
	cout<<endl;
	cout<<sum;

// 	DWORD end = timeGetTime(); 
//	cout<< "Past Time: "<< (end - start)<<endl; 

	FILETIME f1,f2,f3,f4; 
	SYSTEMTIME s1,s2,s3,s4; 
	GetProcessTimes(GetCurrentProcess(),&f1,&f2,&f3,&f4);//注意传递进取的是地址,有& 
	FileTimeToSystemTime(&f4,&s4);//还是地址,转换时间类型 
	//cout<<f4.dwLowDateTime<<endl;//输出的是64位的地位 
	cout<<s4.wSecond*1000+s4.wMilliseconds<<endl;//这里我把时间转化成毫秒了 


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -