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 ...
随机推荐
- design pattern及其使用
什么是设计模式? design pattern是一个通用的,可以被重用的关于一个常见的问题的解决方案. 为什么要用设计模式? 引入设计模式的理论基础非常简单.我们每天都会碰到问题.我们可能碰到决定使用 ...
- 指针数组vs数组指针 指针函数vs函数指针
在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...
- Volley : "参数param:{ inoutNo:inoutNo ,whcode:’’}
private void fuzzySearch() { mRequestQueue = Volley.newRequestQueue(getActivity()); String str = Sha ...
- 总结swift 1.2适配swift2.0遇到的改变
swift1.2适配swift2.0 以下列举的是我在项目中遇到的需要修改的,基本常见的问题就没有罗列了. 1.find函数变成了为indexOf 2.sort变成了sortInPlace 3.sor ...
- iOS中第三方框架刷新
0.先加入主头文件 #import "MJRefresh.h" 1.添加下拉刷新 MJRefreshHeaderView *header = [MJRefreshHeaderVie ...
- mac出现一个白条
mac出现一个白条,除了finder没有任何程序运行,出现好几次了,怎么解决? 打开finder输中文出现 按esc键
- maven整合s2sh截图
- 【django】django学得好迷茫啊 来个学习规划吧
http://www.zhihu.com/question/26235428
- 查看事务锁:innodb_trx+innodb_locks+innodb_lock_waits
当出现:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction,要解决是一件麻烦的事情:特别是当一个SQL ...
- mysql利用存储过程批量插入数据
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...