一笔画问题

描述

zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。

规定,所有的边都只能画一次,不能重复画。

 
输入
第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
输出
如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。
样例输入
2
4 3
1 2
1 3
1 4
4 5
1 2
2 3
1 3
1 4
3 4
样例输出
No
Yes

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int P,Q,count;
bool flag[1005],sign;
vector<int> num[1005];

int judge()
{
int sum=0;
for(int i=1;i<=P;++i)
{
int t=num[i].size();
if(t%2!=0)
sum++;
}
return sum;
}

void dfs(int i)
{
if(count==P)
{
sign=true;
return ;
}
else
for(int j=0;j<num[i].size();++j)
if(!flag[num[i][j]])
{
flag[num[i][j]]=true;
count++;
dfs(num[i][j]);
if(sign)
return;
}
}

int main()
{
int n;
cin>>n;
while(n--)
{
memset(flag,false,sizeof(flag));
memset(num,0,sizeof(num));

cin>>P>>Q;//P个顶点,Q条线
for(int i=1;i<=Q;++i)
{
int a,b;
cin>>a>>b;
num[a].push_back(b);
num[b].push_back(a);
cout<<num[a][b]<<endl;
}

int odd_number=judge();
if(odd_number==0||odd_number==2)
{
flag[1]=true;
count=1;
sign=false;
dfs(1);

if(sign)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
else
cout<<"No"<<endl;
}
return 0;
}

首先我们应当知道什么是欧拉路径和欧拉回路

欧拉路径:从某结点出发一笔画成所经过的路线叫做欧拉路径。 
欧拉回路:在欧拉路径的基础上又回到起点。 
a、凡是由偶点组成的连通图,一定可以一笔画成。画时可以把任一偶点为起点,最后一定能以这个点为 
终点画完此图。    
b、凡是只有两个奇点的连通图(其余都为偶点),一定可以一笔画成。画时必须把一个奇点为起点,另 
一个奇点终点。   
c、其他情况的图都不能一笔画出。(有偶数个奇点除以2便可算出此图需几笔画成。)

欧拉回路和欧拉路径的判断 
欧拉回路: 
无向图:每个顶点的度数都是偶数,则存在欧拉回路。 
有向图:每个顶点的入度都等于出度,则存在欧拉回路。 
欧拉路径: 
无向图:当且仅当该图所有顶点的度数为偶数 或者 除了两个度数为奇数外其余的全是偶数。 
有向图:当且仅当该图所有顶点 出度=入度 或者 一个顶点 出度=入度+1,另一个顶点 入度=出度+1,其 
他顶点 出度=入度。

思路: 
这里能一笔画有两个条件。 
①(入度||出度)为奇数的顶点的个数为0||2。 
②图是连通的。

原因:奇度顶点在连通图中相当于起点或者终点,所以个数只能是0个(起点即终点)或者两个(一个起点一个终点) 
 
 
参考链接:https://blog.csdn.net/blessLZH0108/article/details/53671481
https://blog.csdn.net/SL_World/article/details/79729566

nyoj 一笔画问题的更多相关文章

  1. Nyoj 一笔画问题(图论)

    描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整数N(N&l ...

  2. NYOJ 一笔画

    # include<iostream> # include<string> # include<string.h> # include<queue> # ...

  3. NYOJ 一笔画问题 欧拉路

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  4. nyoj 42-一笔画问题 (欧拉图 && 并查集)

    42-一笔画问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:25 题目描述: zyc从小就比较喜欢玩一些小游戏,其中就包括画 ...

  5. NYOJ 42 一笔画问题

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  6. NYOJ 42 一笔画问题 (并查集+欧拉回路 )

    题目链接 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整数 ...

  7. nyoj 42 一笔画 欧拉通路

    http://acm.nyist.net/JudgeOnline/problem.php?pid=42 一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc ...

  8. NYOJ 42 一笔画

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

  9. NYOJ 题目42 一笔画问题

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...

随机推荐

  1. xmind visio mindmanager edraw比较

    xmind visio mindmanager edraw比较   xmind visio mindmanager Edraw 中心主题 有 无 有   泳道图 无 有 有   结构上讲 [思维导图] ...

  2. Openwrt Support RESET Button (5)

    1 Scope of Document This document describes how to support reset button under openwrt system2 Requir ...

  3. ETL设计详解

    ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更 ...

  4. bzoj1599

    题解: 暴力枚举每一种可能性 代码: #include<bits/stdc++.h> using namespace std; int s1,s2,s3,ans,num; int main ...

  5. 51nod1837

    题解: 数论,经过一些大佬的证明,只有1和2这两种可能性 然后再分开来判断即可 注意1的时候为0 代码: #include<bits/stdc++.h> using namespace s ...

  6. ShellExecute函数的问题

    情境:自己写了一个loading画面,定时器到时间后调用shellexecute函数调用真正的程序. 问题:调用时出错,说找不到dll资源,但是用鼠标双击确可以打开. 经过分析之后,应该是路径的问题, ...

  7. 用正则表达式输出rdf文档的三元组格式数据

    占个位置 1.输出所有尖括号里的内容 package com.jena; import java.io.BufferedReader; import java.io.FileReader; impor ...

  8. 什么是 dynaTrace Ajax

    随着 jQuery.Dojo.YUI 等框架的兴起让构建 Web2.0 应用更加容易,但随之带来的定位等应用问题也越来越难,尤其是与性能相关的.dynaTrace Ajax Edition 是一个强大 ...

  9. 玩转X-CTR100 l STM32 l STM32F4 l 蓝牙串口通信

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      蓝牙串口通信模块,X-CTR100控制 ...

  10. <NET CLR via c# 第4版>笔记 第12章 泛型

    泛型优势: 源代码保护 使用泛型算法的开发人员不需要访问算法的源代码.(使用c++模板的泛型技术,算法的源代码必须提供给使用算法的用户) 类型安全 向List<DateTime>实例添加一 ...