POJ 1300 判断欧拉回路
来源:互联网 发布:linux oracle 进程 编辑:程序博客网 时间:2024/05/22 05:04
题意:能否找到一条路径经过所有开着门的房间,并使得:1:通过门后立即把门关上,2:关上的门不在打开,3:最后回到你自己的房间(房间0),并且所有的门都已经关闭。
题目已知这是连通图。
分析:以房间为顶点,连接房间之间的门为边构造图。根据题意,输入文件的每个测试数据所构造的图都是连通的。本题实际上是判断一个图中是否存在欧拉回路或者欧拉通路。
无向图存在欧拉回路的充要条件
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图。
有向图存在欧拉回路的充要条件
一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图
这题是无向图。
这题的关键其实是在读入输入。。。1:因为有空行,而且这些空行都是有用的信息,所以不能简单的用cin||scanf输入每个房间通往其他房间的房间号。
注意下面代码。
View Code
// I'm the Topcoder//C#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <math.h>#include <time.h>//C++#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <cctype>#include <stack>#include <string>#include <list>#include <queue>#include <map>#include <vector>#include <deque>#include <set>using namespace std;//*************************OUTPUT*************************#ifdef WIN32#define INT64 "%I64d"#define UINT64 "%I64u"#else#define INT64 "%lld"#define UINT64 "%llu"#endif//**************************CONSTANT***********************#define INF 0x3f3f3f3f#define eps 1e-8#define PI acos(-1.)#define PI2 asin (1.);typedef long long LL;//typedef __int64 LL; //codeforcestypedef unsigned int ui;typedef unsigned long long ui64;#define MP make_pairtypedef vector<int> VI;typedef pair<int, int> PII;#define pb push_back#define mp make_pair//***************************SENTENCE************************#define CL(a,b) memset (a, b, sizeof (a))#define sqr(a,b) sqrt ((double)(a)*(a) + (double)(b)*(b))#define sqr3(a,b,c) sqrt((double)(a)*(a) + (double)(b)*(b) + (double)(c)*(c))//****************************FUNCTION************************template <typename T> double DIS(T va, T vb) { return sqr(va.x - vb.x, va.y - vb.y); }template <class T> inline T INTEGER_LEN(T v) { int len = 1; while (v /= 10) ++len; return len; }template <typename T> inline T square(T va, T vb) { return va * va + vb * vb; }// aply for the memory of the stack//#pragma comment (linker, "/STACK:1024000000,1024000000")//endconst int maxn = 1010;char s[maxn];char s2[maxn];int n,m;int door[maxn];//计算每个房间的门数int doors;//门的总数int even,odd;int main(){ while(cin>>s){ if(strcmp(s,"ENDOFINPUT")==0){ break; } doors=0; even=0; odd=0; getchar(); scanf("%d%d",&m,&n); getchar();//不可少; memset(door,0,sizeof(door)); for(int i=0;i<n;i++){ gets(s2); int len=strlen(s2); for(int j=0;j<len;j++){ int end=0; while(s2[j]!=' '&&j<len){ end=s2[j]-48; j++; door[i]++;// door[end]++; doors++; } } } gets(s); for(int i=0;i<n;i++){ if(door[i]%2==0) even++; else odd++; } if(odd==0&&m==0) printf("YES %d\n",doors); else if(odd==2&&door[m]%2==1&&door[0]%2==1&&m!=0){ printf("YES %d\n",doors); } else printf("NO\n"); } return 0;}
- POJ 1300 判断欧拉回路
- POJ 1003 判断欧拉回路
- POJ 1386 判断欧拉回路
- POJ 2337 欧拉回路+欧拉路径+判断欧拉回路和路径
- 欧拉回路判断
- 欧拉回路判断
- POJ 1780 欧拉i回路判断&&输出欧拉回路
- poj 1300 Door Man 欧拉回路
- [欧拉回路] poj 1300 Door Man
- poj 1300 欧拉回路判定方法
- POJ 1386 Play on Words(判断欧拉回路存在)
- 欧拉路与欧拉回路的判断 poj 1386
- poj 1637 判断混合图是否存在欧拉回路
- POJ 1300 判断是否存在欧拉回路(包含定理)
- 欧拉回路的判断
- 欧拉回路的判断
- 欧拉回路的判断
- POJ 1300 欧拉通路&欧拉回路
- ZOJ2110 dfs+剪枝
- POJ 1979 简单dfs||bfs
- POJ 1562 dfs求连通分量的个数
- Arab and North African Region,2002(Snakes & ladders)
- POJ 2243 bfs
- POJ 1300 判断欧拉回路
- acm和做人有关系?
- POJ 1780 欧拉i回路判断&&输出欧拉回路
- fleury算法输出欧拉回路
- POJ 1511 spfa求最短回路
- POJ1847 floyd求最短路径
- POJ2394 dijksta||spfa求最短路
- POJ2457 dijksta求最短路&&输出走过的路径
- POJ 3295 spfa判断是否存在负权回路