hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)
http://acm.hdu.edu.cn/showproblem.php?pid=5424
哈密顿通路:联通的图,访问每个顶点的路径且只访问一次
n个点n条边
n个顶点有n - 1条边,最后一条边的连接情况:
(1)自环(这里不需要考虑);
(2)最后一条边将首和尾连接,这样每个点的度都为2;
(3)最后一条边将首和除尾之外的点连接或将尾和出尾之外的点连接,这样相应的首或尾的度最小,度为1;
(4)最后一条边将首和尾除外的两个点连接,这样就有两个点的度最小,度都为1
如果所给的图是联通的话,那么其度为1的点最多有2个,否则该图不连通
以度最小的点为起点进行DFS判断是否为哈密顿通路
哈密顿通路介绍:
https://en.wikipedia.org/wiki/Hamiltonian_path
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#define N 1010
#define INF 0x3f3f3f3f using namespace std; int n, G[N][N], du[N], f;
bool vis[N]; void Init()
{
memset(G, , sizeof(G));
memset(du, , sizeof(du));//du[i]记录点i的入度
memset(vis, false, sizeof(vis));
} void DFS(int u, int cnt)
{
int i;
vis[u] = true;
if(cnt == n)//访问次数与点的个数相等,则每个点都访问到了,且每个点只访问了一次
{
f = ;
return ;
}
for(i = ; i <= n && !f ; i++)
{
if(!vis[i] && G[u][i])
{
DFS(i, cnt + );
vis[i] = false;
}
}
} int main()
{
int u, v, i;
while(~scanf("%d", &n))
{
Init();
for(i = ; i <= n ; i++)
{
scanf("%d%d", &u, &v);
if(u != v && !G[u][v])//去除自环和重边的情况
{
G[u][v] = G[v][u] = ;
++du[u];
++du[v];
}
}
int s = , num = ;//s记录度最小的点
for(i = ; i <= n ; i++)
{
if(du[i] == )
{
num++;//统计度为1的点的个数
s = i;
}
}
if(num > )
{
printf("NO\n");//判断其不连通,则不是哈密顿通路
continue;
}
f = ;
DFS(s, );//从度最小的开始搜
if(f == )
printf("YES\n");
else
printf("NO\n");
}
return ;
}
hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)的更多相关文章
- HDU 5424——Rikka with Graph II——————【哈密顿路径】
Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu 5424 Rikka with Graph II(dfs+哈密顿路径)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so h ...
- HDU 5424 Rikka with Graph II
题目大意: 在 N 个点 N 条边组成的图中判断是否存在汉密尔顿路径. 思路:忽略重边与自回路,先判断是否连通,否则输出"NO",DFS搜索是否存在汉密尔顿路径. #include ...
- 哈密顿图 BestCoder Round #53 (div.2) 1003 Rikka with Graph II
题目传送门 题意:判断是否为哈密顿图 分析:首先一种情况是不合法的:也就是度数为1的点超过2个:合法的有:,那么从度数为1的点开始深搜,如果存在一种走法能够走完n个点那么存在哈密顿路 收获:学习资料 ...
- HDU 5432 Rikka with Tree (BestCoder Round #53 (div.2))
http://acm.hdu.edu.cn/showproblem.php?pid=5423 题目大意:给你一个树 判断这棵树是否是独特的 一颗树是独特的条件:不存在一颗和它本身不同但相似的树 两颗树 ...
- BestCoder Round #53 (div.1)
Problem A: 题目大意: 给出以节点1为根的一棵树A,判断它是否是特殊的.一棵树是特殊的当且仅当不存在和它不完全相同的一棵树B,使得A中点i到点1的距离和B中相等. 题解: 假设一个点x的深度 ...
- hdu 5422 Rikka with Graph(简单题)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hdu 5636 搜索 BestCoder Round #74 (div.2)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- HDU 5831 Rikka with Parenthesis II(六花与括号II)
31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
随机推荐
- Tyvj 1085 派对
这道题和HDU 1016的素数环那道题很相似. 虽然1A了,但写代码的过程中还是丢三落四的. 贴完代码闪人,嘿嘿 //#define LOCAL #include <iostream> # ...
- 阿里云linux服务器安装Phalcon-----"phalcon Volt directory can't be written" "gcc: internal compiler error: Killed (program cc1)"
这里特别蛋疼的一件事是官方英文文档和中文文档命令参数略有不同 中文文档: //通用平台下安装指定的软件包: sudo yum install git gcc make pcre-devel php-d ...
- 在页面中使用js
JavaScript:用来在页面编写特效的,和HTML\CSS一样当都是由浏览器解析 JavaScript语言 一.JS如何运行(JavaScript,jscript,VbScript,applet ...
- I.MX6 Android backlight modify by C demo
/************************************************************************** * I.MX6 Android backligh ...
- 修改Android系统字号(一)
/*********************************************************************** * 修改Android系统字号(一) * 说明: * ...
- setTimeout/setInterval
//使用 setTimeout 时需注意,当该代码执行时,JS 会立即编译函数第一个参数“code” //所以该函数的第一个参数应该为:需要编译的代码.或者一个函数 //例1:setTimeout(& ...
- FPGA代码设计规范整理
1.设计中的FIFO.状态机接口需要有异常恢复状态和状态上报机制,格雷码电路防止被综合电路优化掉. a)自行设计的格雷码FIFO(一般用于连续数据流跨时钟域)用Synplify综合时,为了防止被优化需 ...
- php查询汉字的拼音首字母的函数
function getfirst($str, $charset='utf8'){ $dict=array( 'a'=>0xB0C4, 'b'=& ...
- PHP中的session
来自博客园 1.初始化(使用session前都要使用,一个页面用一个就可以了) session_start(); 2.保存 $_SESSION[$sessionName]=$value; (value ...
- java 学习资料
最近一直在从java基础开始学习java,感觉个人学习思路还是比较混乱的. 看到Java工程师成神之路中介绍了需要学习的知识点,并在<成神之路系列文章>中分章分节的开始介绍其中所有的知识点 ...