一笔画问题

时间限制:3000 ms  |  内存限制:65535 KB
难度:4

描述

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讲解,这一道题仔细理解意思会发现,和“吝啬的国度”那道题很像;就是搜索的方式不同代码如下:
 1 #include<iostream>
 2 #include<vector>
 3 #include<queue>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=10000;
 7 int visit[N];
 8 int cnt;
 9 vector< int >cc[N];
10 void  dfs(int x)
11 {
12    visit[x]=1;
13    int next=-1;
14     for(int i=0;i<cc[x].size();i++)
15     {
16         int tmp=cc[x][i];
17         if(!visit[tmp])
18         {
19             next=tmp;
20             break;
21         }
22     }
23     if(-1!=next)
24     dfs(next);
25 }
26 int main()
27 {
28     int t,m,n,a,b,i;
29     cin>>t;
30     while(t--)
31     {int max=0;
32         cin>>m>>n;
33         for(i=1;i<=n;i++)
34         {
35             cin>>a>>b;
36             cc[a].push_back(b);
37             cc[b].push_back(a);
38         }
39         int start=1;
40         for(i=2;i<=m;++i)
41         {
42             if(cc[i].size()<cc[start].size())
43             start=i;
44         }
45        dfs(start);
46        bool flag=true;
47        for(i=1;i<=m;i++)
48          if(!visit[i])
49          {
50              flag=false;
51              break;
52          }
53          if(!flag)
54          cout<<"No";
55          else
56          {
57              int j=0;
58              for(i=1;i<=m;i++)
59                   if(cc[i].size()&1)
60                        j+=1;
61                        if(2==j ||0==j)
62                        cout<<"Yes";
63                        else cout<<"No";
64          }
65          for(i = 0; i <=m; ++i)
66          {
67            visit[i]=0;cc[i].clear();
68          }
69          cout<<endl;
70     }
71     return 0;
72 }

 1 #include<stdio.h>
 2 #include<string.h>
 3 using namespace std;
 4 int Edge[2001][2001],visited[1001],degree[4005];
 5 void dfs(int cur,int v)
 6 {
 7  visited[cur]=1;
 8  int i;
 9  for(i=1;i<=v;i++)
10     if(Edge[cur][i])                //从邻接顶点往下寻找并计算出结点的度
11    {
12        degree[cur]++;
13        if(!visited[i])           //标记邻接顶点
14        dfs(i,v);
15    }
16 }
17 int main()
18 {
19  int test;
20  scanf("%d",&test);
21  while(test--)
22  {
23   int v,e;
24   memset(Edge,0,sizeof(Edge));
25   memset(visited,0,sizeof(visited));
26   memset(degree,0,sizeof(degree));
27   scanf("%d%d",&v,&e);
28   int j,x,y,ok=1;
29   for(j=1;j<=e;++j)
30   {
31        scanf("%d%d",&x,&y);
32        Edge[x][y]=Edge[y][x]=1;
33   }
34   dfs(1,v);
35   for(j=1;j<=v;++j)              //循环判断图是否连通
36   {
37        if(visited[j]==0)
38        {
39             ok=0;               //如果有点没有被连到
40             break;
41        }
42   }
43   if(!ok) printf("No\n");
44   else
45    {
46        j=0;
47        for(int k=1;k<=v;++k)
48        if(degree[k]%2!=0)
49             j+=1;
50        if(j==2||j==0)                 //j=2时,则有两个点必为起点和终点,j=0,则任意点为起始点
51        printf("Yes\n");
52        else
53        printf("No\n");
54    }
55  }
56 }

转载于:https://www.cnblogs.com/lovychen/p/3215221.html

ny42 一笔画问题相关推荐

  1. 32个笔画顺序表图片_32个笔画掌握透了,练字真的不难

    笔画作为硬笔书法最基础的部首,也是十分重要的一部分.建议初学者一定先要学好这些笔画.配图选自田英章老师的楷书教材. 这本教材是我上大学时候,社团统一购买的.由于都是大部分都是摹写的,我本人不喜欢摹写, ...

  2. 一笔画问题【数据结构-图论】

    回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复. 田 我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论. 那么是否可以找到数学定理? 其实就是欧拉七桥问题: ...

  3. 汉字笔画数据_统计学原理 数据的预处理

    数据审核 数据审核-原始数据(raw data) 完整性审核 应调查的单位或个体是否有遗漏 所有的调查项目或变量是否填写齐全 准确性审核 数据是否真实反映实际情况,内容是否符合实际 数据是否有错误,计 ...

  4. 模板 - 欧拉路、欧拉回路(一笔画问题)

    整理的算法模板合集: ACM模板 目录 非递归版 普通递归版 HierholzersHierholzersHierholzers算法(输出字典序最小的答案) FleuryFleuryFleury算法 ...

  5. 一笔画 (25 分)

    小丁最近迷恋上一个游戏,传说中的"一笔画"游戏. 那么什么是一笔画?如下图,顾名思义就是一笔可以完成的图.一笔画最基本的要求是在画图的过程中,笔不能离开纸,且笔所画过的线不能重复, ...

  6. pygame的字体画不出来_5毛钱的圆珠笔画的?每一幅都是大师之作,网友:为何我画不出来...

    5毛钱的圆珠笔画的?每一幅都是大师之作,网友:为何我画不出来 艺术家们总是在记录这个社会,他们通过各种各样的方式来表现出他们对这个社会的热爱,而这些方式中最常见的就是绘画了,在艺术家的画笔之下,定格了 ...

  7. 一笔画问题 (DFS或并查集)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=42 一笔画问题是欧拉回路的一个变形,可以一笔画的条件有两个:1.所有顶点必须连通  2. ...

  8. hdu3018 一笔画问题

    题意:       给你一幅画,这幅画由点和边构成,问你最少几笔能把这幅画画完. 思路:      这个题目的结论比较巧妙,首先我们考虑下,如果给的图是欧拉图,或者是条欧拉回路,那么我们一笔就搞定了, ...

  9. 汉字的奥秘: 获取汉字的笔画数

    汉字的奥秘: 获取汉字的笔画数 想想看,如果你需要在代码里面得到汉字的笔画数,该怎么办呢?每到这个时候,我们就一直感慨咱汉字的复杂啊 网上搜了一下,能看到的解决方案大抵都是说把所有汉字的笔画预先记录好 ...

最新文章

  1. 逆向而行—ASP的O/R MAPPING 使用解释
  2. unity fixedupdate_unity相关
  3. 利用任务调度特性检测Android模拟器
  4. 中国大学mooc慕课python答案_中国大学MOOC(慕课)Python编程基础题目答案
  5. 三十、PHP框架Laravel学习笔记——模型的预加载
  6. html 自动排序代码,SEO中常用HTML代码大全,及权重排序
  7. mybatis--一对一、一对多、多对多(七)
  8. 关于单片机大循环结构编程
  9. gentoo 安装php7,在Gentoo安装Wifidog Portal
  10. vivo x6plus支持html,vivo x6plus手机USB驱动
  11. 万年历php程序含数据库,php之万年历
  12. hdu 5510 strstr/find/KMP
  13. CS院校解析 | 清华大学深圳国际研究生院
  14. win10系统更新后打开chrome浏览器几秒后自动闪退
  15. maven中filtering的使用
  16. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...
  17. mysql 5.7 ga_mysql 5.7.9(GA) 安装
  18. android 照相机app,Spectre相机
  19. 【JavaScript】 模块 module
  20. java判断当前时间在某个时间段内

热门文章

  1. CNN 模型的参数(parameters)数量和浮点运算数量(FLOPs)是怎么计算的
  2. php Session存储到Redis的方法
  3. 【论文笔记】Sparse filtering
  4. 【原创】C# API 未能创建 SSL/TLS 安全通道 问题解决
  5. ES6学习笔记之Promise
  6. python 文件命令
  7. python 源码解析
  8. mysql中engine=innodb和engine=myisam的区别详解
  9. 格式化显示在Label控件中的金额格式文本 (2)
  10. javascript 运算+