博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nyoj 一笔画问题(图论)
阅读量:5998 次
发布时间:2019-06-20

本文共 1344 字,大约阅读时间需要 4 分钟。

 

描述

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

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

 

 
输入
第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
输出
如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。
样例输入
24 31 21 31 44 51 22 31 31 43 4
样例输出
NoYes 每个点对应的度  再用到欧拉回路

 

代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 using namespace std;13 14 #define N 101015 int g[N][N];16 bool vis[N];17 18 int bfs(int n)19 {20 queue
q;21 int que,du,odd,i; 22 memset(vis,0,sizeof(vis)); 23 q.push(1); 24 vis[1] = 1; 25 que = 0; //队列中点的个数 26 odd = 0; //度为奇数的点的个数 27 while(!q.empty()){28 int top=q.front();29 q.pop(); que++;30 du=0;31 for(int i=1; i<=n; i++){32 if(g[top][i]){33 if(!vis[i]){34 q.push(i);35 vis[i]=1;36 }37 du++;38 }39 }40 if(du&1) odd++;41 }42 if((odd==0 || odd==2)&& que==n) printf("Yes\n");43 else printf("No\n");44 }45 46 int main()47 {48 int n;49 int P,Q,p,q;50 scanf("%d",&n);51 while(n--){52 memset(g,0,sizeof(g));53 scanf("%d %d",&P,&Q);54 while(Q--){55 scanf("%d %d",&p,&q);56 g[p][q]=g[q][p]=1;57 }58 bfs(P);59 }60 }

 

转载于:https://www.cnblogs.com/wangmengmeng/p/5295941.html

你可能感兴趣的文章
【IT基础】让你的网站留住用户
查看>>
Mac outlook2011 无法拒绝会议邀请
查看>>
红与黑
查看>>
linux命令速查
查看>>
Spring+Tomcat的JNDI数据源连接池简单配置
查看>>
Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件
查看>>
struts中采用注解配置Action
查看>>
SecureCRT 安装上传(rz)和下载(sz)
查看>>
Rsync配置参数详解-什么是Rsync
查看>>
Android2.2 API 中文文档系列(1) —— TextView
查看>>
如何对磁盘做完整的全盘镜像备份?
查看>>
我的TiddlyWiki
查看>>
python学习:读写文件和字典排序
查看>>
Git学习笔记
查看>>
网络安全系列之三十七 Pangolin(穿山甲)和Havij(胡萝卜)的使用
查看>>
linux shell 将当前文件地址作为默认路径写入环境变量
查看>>
Apache CXF学习-创建基于spring的web service
查看>>
View Horizon Mirage安装手册(四)——Mirage Management Console安装
查看>>
Hibernate 检索-Criteria
查看>>
Radius服务器A10负载均衡解决方案的相关配置
查看>>