HDU 欧拉回路
来源:互联网 发布:无法连接到网络1-10087 编辑:程序博客网 时间:2024/05/22 08:25
Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
Sample Output
1
0
判断欧拉回路的条件
无向图存在欧拉回路的充要条件
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。
有向图存在欧拉回路的充要条件
一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。
第一次使用vector库
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<vector>#include<queue>#include<stack>using namespace std;#define ll long longconst double Inf=1e+9;vector <int> edge[1001];bool vis[1001];int e[1001]; //记录度数void dfs(int start){ //判断是否连通 int i,p; vis[start]=true; for (i=0;i<edge[start].size();i++) { p=edge[start][i]; if (!vis[p]) dfs(p); }}int main(){ int i,a,b,m,n; while (~scanf("%d",&m),m) { for (i=1;i<=m;i++) { //初始化 e[i]=0; vis[i]=false; edge[i].clear(); } scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d%d",&a,&b); if (a!=b) { edge[a].push_back(b); edge[b].push_back(a); e[a]++,e[b]++; } } int flag=1; for (i=1;i<=m;i++) if (e[i]%2) { printf("0\n"); flag=0; break; } if (flag) { dfs(1); for (i=1;i<=m;i++) if (vis[i]==false) { flag=0; printf("0\n"); break; } } if (flag) printf("1\n"); } return 0;}输出欧拉回路路径
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>#include<stack>;using namespace std;int map[500][500],vis[500][500];int m,n;typedef struct node{ int x,y;}node;stack<node>q;node a;void euler(int u){ int i; for (i=1;i<=n;i++) if (map[u][i]&&!vis[u][i]) { vis[u][i]=vis[i][u]=1; euler(i); a.x=u; a.y=i; q.push(a); }}int main(){ int i,s,e; node a; scanf("%d%d",&n,&m); for (i=1;i<=m;i++) { scanf("%d%d",&s,&e); map[s][e]=map[e][s]=1; } euler(1); while (!q.empty()) { a=q.top(); printf("%d %d\n",a.x,a.y); q.pop(); } return 0;}
0 0
- HDU 欧拉回路
- 欧拉回路 HDU
- HDU 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- 【欧拉回路】hdu 1878
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1116 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU-1878-欧拉回路
- Hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- 双亲委派机制
- Java API
- 如何让touchmove之后不触发touchend的事件
- ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)
- rpm 命令整理
- HDU 欧拉回路
- PDF文件如何转换为Word文档
- 自定义listview实现上拉加载下拉刷新
- 为什么设置了view的Opaque性能会提高(GPU)
- OpenCV下批量读取规则连续命名文件的源程序!
- MyEclipse Maven新建web工程
- 【C++程序设计技巧】Pimpl机制
- 使用React-route和Webpack快速构建一个react程序
- 198. House Robber [easy] (Python)