一.原题链接:http://poj.org/problem?id=1300

二.题目大意:判断是否能从一个给定的点出发,走到0点,其中所有的边只走一遍。

三.思路:无向图欧拉通路判定

1.G为连通图,并且G刚好有2个奇度顶点或无奇度顶点。

2.当刚好有2个奇度顶点,这2个顶点为起点和终点。

3.当无奇度顶点,必有欧拉回路。(图为欧拉图的充要条件)

所以题目要求要到达0,当没有奇度顶点,那么要回到0,起点只能为0。当有2个奇度顶点,说明没有回路,起点不能为0,并且起点和0都必须是奇度顶点。

四.代码:写得好挫,输入太坑。。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>using namespace std;const int MAX_SIZE = 21,INF = 0x3f3f3f3f;int cnt[MAX_SIZE], start, nodeNum, edgeNum;int myAtoi(char buffer[], int &point)
{int i, res;stack <int> sta;for(i = 0; buffer[i] != ' ' && buffer[i]; i++){sta.push(buffer[i] - '0');}res = 0;if(!buffer[i])i--;point += i;i = 0;while(!sta.empty()){res += sta.top()*pow(10.0, i);i++;sta.pop();}return res;
}void addNode(char buffer[], int u)
{int i, v;for(i = 0; buffer[i]; i++){v = myAtoi(buffer + i, i);cnt[u]++, cnt[v]++; edgeNum++;}
}bool able()
{int i, cntOdd = 0;for(i = 0; i < nodeNum; i++)if(cnt[i] & 1)cntOdd++;if(cntOdd == 0 && start == 0)return true;else if(cntOdd == 2 && (cnt[start]&1) &&(cnt[0]&1) && start != 0)return true;return false;
}int main()
{//freopen("in.txt", "r", stdin);int i, j;char buffer[32], c;while(1){memset(cnt, 0, sizeof(cnt));edgeNum = 0;gets(buffer);if('E' == buffer[0])break;for(i = 0; buffer[i] != ' '; i++);i++;start = myAtoi(buffer + i , i);i++;nodeNum = myAtoi(buffer + i, i);for(i = 0; i < nodeNum; i++){gets(buffer);addNode(buffer, i);}if(able()){cout<<"YES "<<edgeNum<<endl;}else{cout<<"NO\n";}gets(buffer);}return 0;
}

POJ1300 Door Man相关推荐

  1. [POJ1300]Door Man 做题笔记

    题目链接:http://poj.org/problem?id=1300 这题是比较裸的欧拉回路与欧拉通路的判定公式的应用,但这题最可怕的应该是它的读入... Hint:欧拉回路/欧拉通路要求基图联通, ...

  2. 图论 —— 图的遍历

    [概述] 图的遍历问题是从图中某一顶点出发,系统地访问图中所有顶点,使每个顶点恰好被访问一次. 目前,图的遍历问题分为四类: 欧拉通路与欧拉回路问题:遍历完所有的边而不能有重复,即一笔画问题 中国邮递 ...

  3. 将不同数据存储到数据库中_如何将数据存储在兔子洞中

    将不同数据存储到数据库中 Starting with databases and venturing into how the physical components of a computer st ...

  4. mysql存储过程 alter_MYSQL alter procedure alter function 它们只可以更改过程的特性,不可以更改过程的逻辑。...

    例子: delimiter // create procedure proc_a(in numberA int) 这样create procedure 是正确的 begin select number ...

最新文章

  1. java Serializable和Externalizable序列化反序列化详解--转
  2. php获取表所有数据类型,php excel 导入 导入三级分类 表格应该怎么设计才能得到想要的数据格式?...
  3. linux下mysql目录结构_linux下mysql安装配置与目录结构
  4. UNIX标准化及实现之UNIX标准化、UNIX系统实现、标准和实现的关系以及ISO C标准头文件...
  5. ORA-39181: Only partial table data may be exported due to fine grain access control on OE.PURCHAS
  6. St_geometry 初始用
  7. python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能
  8. 矿业公司Aurum对其房东提起法律诉讼,要求收回矿机
  9. 链表反转的两种实现方法,后一种击败了100%的用户
  10. 蓝桥杯 BASIC-18 基础练习 矩形面积交
  11. 3.0-rsync格式
  12. jQuery特效:实现简易轮播图
  13. QuartusII下载程序报错,无法正常下载
  14. 测试员一份工作坚持多久跳槽,才能完美提升薪资?
  15. 小米8刷原生安卓系统
  16. linux下10款markdown软件
  17. 程序员找媳妇的要求是什么呢?
  18. 【每日蓝桥】17、一三年省赛Java组真题“带分数”
  19. 标号法(Dijkstra)求最短路 matlab
  20. 小姐姐都在用的25+技术站点

热门文章

  1. java校园导航_基于Android平台的校园导航系统
  2. Ubunto20.04安装MySQL并修改root用户密码(Linux安装mysql root用户无法登陆)
  3. 今年考研又要线上复试?多所大学计算机考研线上复试详情!
  4. html5音乐相册,魔音相册怎么制作音乐相册 让图片动起来的魔法教程详解
  5. Windows任务管理器结束进程“拒绝访问”解决办法
  6. 请给我一篇 Go 工程实践干货 @ Go中国
  7. 一次不成功的深度学习实践 - 微信跳一跳
  8. 雷电、逍遥模拟器(Android 7.1.2)安装 Xposed 保姆级教程
  9. 图像特征提取:SIFT定位算法关键步骤的说明
  10. spark streaming 自定义接收数据源Receiver测试