欧拉回路是指不重复地走过所有路径的回路,而哈密尔顿环是指不重复地走过所有的点,并且最后还能回到起点的回路。
 代码如下:
#include<iostream>
#include<cstring> using namespace std;
const int Maxn=; int start,lengt,x,n;
bool visited[Maxn],v1[Maxn];
int ans[Maxn],num[Maxn];
int g[Maxn][Maxn]; void print()
{
int i;
for (i=;i<=lengt;i++)
cout<<ans[i]<<' ';
cout<<endl;
} void dfs(int last,int i)
{//访问点i,last表示上次访问的点
visited[i]=;//标记为已经访问过
v1[i]=;//标记为已在一张图中出现过
ans[++lengt]=i;//记录下答案
for (int j=;j<=num[i];j++)
{//x为记录的第几个数
if (g[i][j]==x&&g[i][j]!=last) {//回到起点,构成哈密尔顿环
ans[++lengt]=g[i][j];
print();//如果找到了一个环,则输出ans数组
lengt--;
break;
}
if (!visited[g[i][j]]) dfs(i,g[i][j]);//遍历与i相关联所有未访问过的顶点
}
lengt--;
visited[i]=;//回溯,但需要注意的是v1的值不恢复
} int main() {
cin>>n;
int m;
cin>>m;
for(int i=;i<=m;i++) {
int x,y;
cin>>x>>y;
g[x][++num[x]]=y;//表示x所对的第几个出度所指的数为y,说明xy之间能够“行走”
g[y][++num[y]]=x;//同上
}
for(x=;x<=n;x++)
//每一个点都作为起点尝试访问,因为不是从任何一点开始都能找过整个图的
if (!v1[x]) {//如果点x不在之前曾经被访问过的图里面的话
lengt=;//定义一个ans数组存答案,lengt记答案的长度
dfs(,x);
}
return ;
}

哈密尔顿环x的更多相关文章

  1. Codeforce 263D Cycle in Graph 搜索 图论 哈密尔顿环

    You've got a undirected graph G, consisting of n nodes. We will consider the nodes of the graph inde ...

  2. poj 2288 Islands and Bridges_状态压缩dp_哈密尔顿回路问题

    题目链接 题目描述:哈密尔顿路问题.n个点,每一个点有权值,设哈密尔顿路为 C1C2...Cn,Ci的权值为Vi,一条哈密尔顿路的值分为三部分计算: 1.每一个点的权值之和 2.对于图中的每一条CiC ...

  3. 旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)

    一,旅行商问题与H回路的联系(H回路 定义为 哈密尔顿回路) 旅行商问题是希望售货员恰好访问每个城市一次,最终回到起始城市所用的费用最低,也即判断图中是否存在一个费用至多为K的回路.(K相当于图中顶点 ...

  4. CodeForces - 325E:The Red Button (哈密尔顿 转 欧拉回路)

    Piegirl found the red button. You have one last chance to change the inevitable end. The circuit und ...

  5. poj 2280 Islands and Bridges 哈密尔顿路 状压dp

    题目链接 题意 给定一个\(N\)个点的无向图,求一条哈密尔顿路径\(C_1C_2...C_n\),使其\(value\)最大. \(value\)的计算方式如下:\[\begin{aligned}v ...

  6. poj 2288 Islands and Bridges——状压dp(哈密尔顿回路)

    题目:http://poj.org/problem?id=2288 不知为什么记忆化搜索就是WA得不得了! #include<iostream> #include<cstdio> ...

  7. 【BZOJ 1997】[Hnoi2010]Planar

    Description Input Output   找到哈密尔顿环之后找到不在哈密尔顿环上的边 这些边如果同时在里面相交那他们同时在外面也相交,所以只能一外一内,这就变成了2-SAT,判一下就好了 ...

  8. 【转】NP-Hard和NP-Complete的区别

    原文来自:http://hi.baidu.com/nuclearspace/item/e0f8a1b777914974254b09f4 对 NP-Hard问题和NP-Complete问题的一个直观的理 ...

  9. NOIP 提高组必会!(转)

    1.排序算法(快排.选择.冒泡.堆排序.二叉排序树.桶排序)2.DFS/BFS 也就是搜索算法,剪枝务必要学! 学宽搜的时候学一下哈希表!3.树 ①遍历 ②二叉树 ③二叉排序树(查找.生成.删除) ④ ...

随机推荐

  1. [转帖]glib gslibc libc 的关系与区别

    https://blog.csdn.net/Com_ma/article/details/78692092 [glibc 和 libc] glibc 和 libc 都是 Linux 下的 C 函数库. ...

  2. nginx+gunicorn/uwsgi+python web 的前世今生

    我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...

  3. python网络爬虫(4)结构与基本概念

    基本模型 请求与响应 import urllib.request as urllib2 request=urllib2.Request('http://www.zhihu.com') response ...

  4. JsonObject、JsonArray操作json的个人总结

    介绍 JsonObject.JsonArray之前,先介绍下JsonConfig JsonConfig: setClassMap(Map classMap)设置json属性类型,上json里的其中值为 ...

  5. 第一篇 jQuery

    1-1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  6. java对象的几种创建过程

    java对象的创建过程 (1)用new 语句创建对象,这是最常用的创建对象方法. 下面用一个简单的存在继承关系的实例的创建,来叙述对象创建过程中的细节 概括如下: 执行顺序:(优先级从高到低.)静态代 ...

  7. 这38个小技巧告诉你如何快速学习MySQL数据库

    1.如何快速掌握MySQL? ⑴培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.⑵夯实基础计算机领域的技术非常强调基础,刚开始学习可能还认 ...

  8. N1试卷常考词汇总结

    免れる まぬがれる 免去,幸免 軽率 けいそつ 轻率,草率 捩れる ねじれる 拧劲儿,扭歪,弯曲 裂ける さける 裂开,破裂 避ける さける 躲避,避开 つまむ 挟,捏,掐 追及 ついきゅう 追上.追 ...

  9. 安装Mybatis插件

    http://blog.csdn.net/nextyu/article/details/69225004

  10. Delphi 使用断点