nyoj 42- 一笔画问题(欧拉回路)
来源:互联网 发布:终端查看数据库 编辑:程序博客网 时间:2024/05/04 09:10
描述
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
欧拉定理 如果一个网络是连通的并且奇顶点的个数等于0或2,那么它可以一笔画出;否则它不可以一笔画出。
1.是否连通,用bfs 做判断
2.奇顶点 就是 一个点所连线段是否为奇数个,如果是就是奇顶点
所以 就分两部分解决问题
wa了好几次 都找不到错 最后发现数组开小了 导致wa 很难受 。还是学艺不精,继续努力
代码:
#include <iostream>#include <bits/stdc++.h>using namespace std;int n,m;int Map[2001][2001];int st[2000];int count1[2001];void dfs(int x){ st[x] = 1; int i; for (i=1; i<=n; i++) { if (Map[x][i]) { count1[x]++; if (st[i]==0) dfs(i); } }}int main(){ int N; cin>>N; while (N--) { memset(Map,0,sizeof(Map)); memset(st,0,sizeof(st)); memset(count1,0,sizeof(count1)); cin>>n>>m; int i,t=0; for (i=1; i<=m; i++) { int x,y; cin>>x>>y; Map[x][y] = 1; Map[y][x] = 1; } dfs(1); for (i=1; i<=n; i++) { if (st[i]==0) { t=1; break; } } if (t==1) cout<<"No"<<endl; else { int jd=0; //奇点个数 for (i=1; i<=n; i++) { if (count1[i]%2) { jd++; } } if (jd==0||jd==2) { cout<<"Yes"<<endl; } else cout<<"No"<<endl; } } return 0;}
阅读全文
0 0
- NYOJ 42:一笔画问题【欧拉回路】
- nyoj 42 一笔画问题《欧拉回路》
- NYOJ - 42 - 一笔画问题(欧拉回路,DFS)
- nyoj 42- 一笔画问题(欧拉回路)
- NYOJ 42-一笔画问题(判断欧拉回路)
- NYOJ—一笔画问题(欧拉回路)
- NYOJ 42 一笔画问题(并查集+欧拉回路)
- NYOJ 42 一笔画问题(DFS||并查集+欧拉回路)
- NYOJ 42 一笔画问题 (回路查询,搜索 or 欧拉)
- nyoj 42 一笔画问题 无向图的欧拉回路
- NYOJ 42 一笔画问题 (欧拉回路+并查集)
- nyoj42 一笔画问题 (欧拉回路)
- 欧拉回路解决一笔画问题
- 一笔画问题 【欧拉回路】+【dfs】
- nyoj42一笔画问题 【欧拉回路】
- NYOJ-一笔画问题(并查集+欧拉回路)
- 欧拉回路(一笔画)
- NYOJ 42-一笔画问题:欧拉路径
- Gym
- LSTM和循环网络RNN学习简记
- php实现伪静态和静态化(来源网络只作为个人笔记)
- 【Selenium】1浏览器
- CentOS常用仓库
- nyoj 42- 一笔画问题(欧拉回路)
- 基于对象的编程
- 经历了一个最无聊的义工活动(三点内容想跟大家分享一下)
- mvc WebAPi学习,接口定义和前台调用
- 术--经典题解析(异常)
- 背包问题
- Material Design
- Socket 常见错误码
- centos安装使用composer