HDU 欧拉回路
来源:互联网 发布:白金数据 magnet 编辑:程序博客网 时间:2024/06/04 22:28
欧拉回路
ime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14804 Accepted Submission(s): 5667
Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
束。
Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
Sample Input
3 31 21 32 33 21 22 30
Sample Output
10
Author
ZJU
Source
浙大计算机研究生复试上机考试-2008年
Recommend
思路:这是一个图论入门题。欧拉图中无奇数顶点,通过每条边一次切一次经过所有顶点的回路的图。要经过dfs,边的遍历 。还有那个每个度的检验,必须都为偶数。
#include<stdio.h>#include<vector>#include<string.h>using namespace std;vector<int>G[10000];int vis[1000];void dfs(int i){ vis[i]=1; //走过的顶点都标记过。 for(int j=0; j<G[i].size(); j++) { int v=G[i][j]; if(!vis[v]) dfs(v); } return ;}int main(){ int n,m,i,a,b; while(~scanf("%d %d",&n,&m),n) { memset(vis,0,sizeof(vis)); for(i=1; i<=n; i++) G[i].clear(); for(i=0; i<m; i++) { scanf("%d %d",&a,&b); G[a].push_back(b); G[b].push_back(a); } int k=0,s=0; for(i=1; i<=n; i++) { if(!vis[k]) { k++; if(k>2) //一次调用就经历过所有顶点 break; dfs(i); } } for(i=1; i<=n; i++) { int t=G[i].size(); if(t%2) //判断是奇数顶点还是偶数顶点。 s++; } if(k==1&&s==0) printf("%d\n",k); else printf("0\n"); } 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语言基础-引出方法-方法定义-基本调用操作
- PWM控制电机
- 玩转break,return ,continue的使用和关系
- 走入javascript(三)事件函数的初步认识
- HDU 欧拉回路
- Google 2013笔试题一
- 安卓开发球面波干涉现象仿真app
- storm-学习收藏
- 算法细节系列(32):有趣的数学
- Java中的Dueue和Deque
- codeforces 814 A An abandoned sentiment from past
- vue.js组件化开发实践
- 面向对象设计基本原则(举例说明)