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))(哈密顿通路判断)的更多相关文章

  1. HDU 5424——Rikka with Graph II——————【哈密顿路径】

    Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. 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 ...

  3. HDU 5424 Rikka with Graph II

    题目大意: 在 N 个点 N 条边组成的图中判断是否存在汉密尔顿路径. 思路:忽略重边与自回路,先判断是否连通,否则输出"NO",DFS搜索是否存在汉密尔顿路径. #include ...

  4. 哈密顿图 BestCoder Round #53 (div.2) 1003 Rikka with Graph II

    题目传送门 题意:判断是否为哈密顿图 分析:首先一种情况是不合法的:也就是度数为1的点超过2个:合法的有:,那么从度数为1的点开始深搜,如果存在一种走法能够走完n个点那么存在哈密顿路 收获:学习资料 ...

  5. HDU 5432 Rikka with Tree (BestCoder Round #53 (div.2))

    http://acm.hdu.edu.cn/showproblem.php?pid=5423 题目大意:给你一个树 判断这棵树是否是独特的 一颗树是独特的条件:不存在一颗和它本身不同但相似的树 两颗树 ...

  6. BestCoder Round #53 (div.1)

    Problem A: 题目大意: 给出以节点1为根的一棵树A,判断它是否是特殊的.一棵树是特殊的当且仅当不存在和它不完全相同的一棵树B,使得A中点i到点1的距离和B中相等. 题解: 假设一个点x的深度 ...

  7. hdu 5422 Rikka with Graph(简单题)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  8. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  9. HDU 5831 Rikka with Parenthesis II(六花与括号II)

    31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

随机推荐

  1. QQ互发消息

    private NewsData data; private void button3_Click(object sender, EventArgs e) //发送 { string x = text ...

  2. git deployment strategy

    http://nicolasgallagher.com/simple-git-deployment-strategy-for-static-sites/ You can still ignore a ...

  3. Myeclipse 安装Aptana3.2 插件

    转自(http://www.cnblogs.com/yinger/archive/2011/08/29/2157193.html) 安装步骤: 1.下载aptana3.2 Eclipse Plugin ...

  4. org.apache.jasper.JasperException: /WEB-INF/jsp/add.jsp(40,24) quote symbol expected

    add.jsp 的40行24列少了一个 引号

  5. 清除Xcode缓存和存档文件

    XCode4.2    finder中找到   /Users/Library/Developer/Xcode    (注:Library资源库是隐藏的文件夹) 里面有DerivedData和Snaps ...

  6. Linux makefile教程之书写命令四[转]

    书写命令———— 每 条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟 在依赖规则后面的分号后的.在命令 ...

  7. [再寄小读者之数学篇](2014-11-19 $\tan x/x$ 在 $(0,\pi/2)$ 上递增)

    $$\bex \frac{\tan x}{x}\nearrow. \eex$$ Ref. [Proof Without Words: Monotonicity of $\tan x/x$ on $(0 ...

  8. delphi TClientDataSet 保存到XML

    procedure ExPortNodeQuantifyComponent1(aCDS: TClientDataSet; aCurrNode: TXMLNode); var mStream: TMem ...

  9. 【LeetCode 236】Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  10. MicroSD卡(TF卡)SPI模式实现方法

    现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见.自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查 ...