`

2181 哈密顿绕行世界问题

阅读更多
好吧,没什么难度的,只是要注意那个 ‘0’ 的判断我用了控制台函数……这个不会的可以去查资料,百度之,谷歌之……
/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.

URL   : http://acm.hdu.edu.cn/showproblem.php?pid=2181
Name  : 2181 哈密顿绕行世界问题

Date  :Friday,August 12,2011
Time Stage : 1 hours around

Result:
4400410	2011-08-12 21:04:56 Accepted 2181 0MS 192K 1475 B C++ pyy


Test Data:

Review:
//----------------------------------------------------------------------------*/

#include <stdio.h>
#include <string.h>

#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))

#define infinity	0x7f7f7f7f
#define minus_inf	0x80808080

#define MAXSIZE 21

int way, m ;
int city[MAXSIZE][3], route[MAXSIZE], used[MAXSIZE] ;

void dfs (int c, int cnt)
{
	int i ;
	route[cnt] = c ;
	if (c == m && cnt == 20)
	{
		printf ("%d:  %d ", way++, m) ;
		for (i = 1 ; i < 20 ; ++i)
			printf ("%d ", route[i]) ;
		printf ("%d\n", route[i]) ;
	}
	for (i = 0 ; i < 3 ; ++i)
	{
		if (!used[city[c][i]])
		{
			used[city[c][i]] = 1 ;
			dfs (city[c][i], cnt + 1) ;
			used[city[c][i]] = 0 ;
		}
	}
}

int main ()
{
	char c ;
	int i ;
	while (1)
	{
		c = getc (stdin) ;	// 从输入流中提取一个字符
		if (c == '0')
			break ;
		ungetc (c, stdin) ; // 把这个字符还回去
		for (i = 1 ; i <= 20 ; ++i)
			scanf ("%d%d%d", &city[i][0], &city[i][1], &city[i][2]) ;
		scanf ("%d", &m) ;

		memset (used, 0, sizeof (used)) ;
		way = 1 ;
		for (i = 0 ; i < 3 ; ++i)
		{
			used[city[m][i]] = 1 ;
			dfs (city[m][i], 1) ;
			used[city[m][i]] = 0 ;
		}
		getchar () ; // 别忘了吃掉一个多余的回车键
	}
	return 0 ;
}


0
2
分享到:
评论

相关推荐

    哈密顿环问题

    哈工大算法实验三,搜索算法(哈密顿环问题)求解哈密顿环 1.实现基于树的深度优先搜索算法,求解哈密顿环问题 2.实现哈密顿环的爬山法 3.有界面源代码和实验报告!均为自己所做,正确运行。报告中还有用Excel表分析...

    哈密顿回路问题 算法设计

    哈密顿回路问题 算法设计与分析 回溯法

    对于哈密顿问题的遗传算法求解

    哈密顿问题是一种著名的组合优化问题,源自物理中的哈密顿回路,它要求找到一个图中的闭合路径,使得路径经过每个顶点恰好一次,并返回起点,且路径上的边权之和最小或最大。这个问题在图论、运筹学和计算机科学中...

    最短哈密顿回路算法C语言实现

    这种路径称为哈密顿回路,而寻找这样的路径在很多实际问题中都有应用,如旅行商问题、物流配送路线优化等。 在C语言中实现最短哈密顿回路算法通常需要结合图的表示方法和搜索算法。一种常见的图表示方法是邻接矩阵...

    哈密顿回路 回溯法——C++代码

    在实际问题中,例如旅行商问题,寻找最短的哈密顿回路具有很高的实用价值。回溯法是一种解决问题的有效策略,尤其适用于解决这类组合优化问题。 在这个“哈密顿回路 回溯法——C++代码”的项目中,我们看到的是使用...

    MIPS汇编语言解决哈密顿回路问题

    MIPS汇编语言解决哈密顿回路问题。深度优先搜索,非递归方法。

    自己做的哈密顿回路问题.docx

    哈密顿回路问题 哈密顿回路问题是计算机科学和数学领域中一个著名的NP完全问题,旨在解决在一个给定的网络中,是否存在一条路径,穿过所有的顶点恰好一次,然后回到出发点的路径问题。 在哈密顿回路问题中,需要...

    完整约束体系的哈密顿力学-勒让德变换

    此外,完整约束体系的哈密顿力学-勒让德变换还可以应用于解决各种实际问题,如计算机模拟、优化问题、控制理论等。通过哈密顿量,我们可以描述系统的运动和演化过程,从而解决实际问题。 完整约束体系的哈密顿力学-...

    无向完全图的哈密顿回路

    在图论领域中,无向完全图的哈密顿回路问题是一个经典且重要的问题。要深入探讨这个问题,首先我们需要了解几个基本概念。 图论是数学的一个分支,主要研究的是由点(顶点)和线(边)组成的网络结构。在图论中,图...

    用贪心算法求解哈密顿回路

    在哈密顿回路问题上,贪心策略可能是每次选择未访问过的顶点中与当前顶点距离最近的一个,试图构建一个较短的回路。然而,这种方法无法保证总是找到最短的哈密顿回路,因为贪心选择性质不一定能传递到最后得到全局最...

    基于贪心算法的马踏棋盘哈密顿回路问题

    1. 通过贪心算法对可以回到起点的环游解——哈密顿回路 进行了优化。当棋盘规模小于12时,能够迅速给出任意一个节点的一条哈密顿解 2. 若不要求回到起点最大规模可达60 3. 可以自定义是否回到起点,棋盘规模以及是否...

    广义哈密顿系统原理及应用

    在第五章中,文章讨论了广义哈密顿扰动系统的周期轨道与同宿轨道的问题,周期轨道的存在性和同宿轨道分枝的计算等,都是描述系统长期行为的关键因素。 最后一章涉及理论的应用,作者通过一系列例子,比如平面三个...

    hamidun.rar_哈密顿_哈密顿路径

    哈密顿路径问题在图论领域中是一个经典且复杂的问题,它源于19世纪数学家威廉·哈密顿提出的一个挑战。哈密顿路径是指在一个无向图中找到一条从某顶点出发并经过所有其他顶点恰好一次,最后回到起点的路径。这个问题...

    数学建模 最佳哈密顿圈

    最佳哈密顿圈问题是在给定一个带权完全图的情况下,寻找一个总权重最小的哈密顿圈。这个问题属于NP完全问题,即它没有已知的多项式时间解决方案,但在实际应用中,可以通过各种启发式算法找到近似最优解。本文将详细...

    哈密顿圈问题是NP完全的

    【哈密顿圈问题】 对于一个有向图G=(V,E),如果G中的圈C恰好经过每一个顶点一次,则称圈C是一个哈密顿圈。即,哈密顿圈构成一条经过所有的顶点,没有重复的“路线”。如图6是一个含有哈密顿圈的图。 图6 一个含有...

    基于MATLAB的哈密顿回路算法-TSP模拟退火 程序源代码.rar

    《基于MATLAB的哈密顿回路算法与模拟退火在TSP问题中的应用》 在计算机科学领域,旅行商问题(Travelling Salesman Problem, TSP)是一类著名的组合优化问题,它询问最短可能的路径,使得一个旅行商能够访问每个...

    金字塔图的哈密顿图性质研究

    哈密顿性质是图论中的一个经典问题,它在理论计算机科学中有广泛的应用。 本研究将埃及金字塔的形状作为模型设计出了一类金字塔图,进而分为了平面金字塔图和立体多面金字塔图两种类型。研究重点是探究这类图形是否...

    哈密顿图的判断(mips实现)

    哈密顿图判断 输入一个具有n个顶点的无向图G,判断G是否有哈密尔顿回路。(哈密顿回路问题,建议使用递归解决)

Global site tag (gtag.js) - Google Analytics