1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次)
2.问题2:判断一个图是否有欧拉路径:
(1)图G是连通的,无孤立的点
(2)有向图每个点的入度等于出度
(3)有向图,可以存在两个点,其入度不等于出度,其中一个入度比出度大一,为路径的起点;另一个出度不入度大一,为路径的终点

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#include<vector>
using namespace std;
const int maxx=5005;
const int inf=0x3f3f3f3f;
int indegree[maxx];
int vis[maxx];
int outdegree[maxx];
int n,m;
int cnt;
int mark;
char s[maxx];
vector<int>G[maxx];
void init(){cnt=0;mark=0;m=0;memset(indegree,0,sizeof(indegree));memset(outdegree,0,sizeof(outdegree));memset(vis,0,sizeof(vis));for(int i=1;i<=66;i++){G[i].clear();}
}
void dfs(int u){vis[u]=1;cnt++;if(cnt==m&&mark==0){mark=1;return ;}for(int i=0;i<G[u].size();i++){int v=G[u][i];if(vis[v]==0){dfs(v);}}
}
int main(){int t;scanf("%d",&t);while(t--){scanf("%d",&n);init();int visited[maxx];memset(visited,0,sizeof(visited));for(int i=1;i<=n;i++){scanf("%s",&s);int a=s[0]-'a'+1;int b=s[strlen(s)-1]-'a'+1;G[a].push_back(b);G[b].push_back(a);if(visited[a]==0){visited[a]=1;++m;}if(visited[b]==0){visited[b]=1;++m;}outdegree[a]++;indegree[b]++;}int index;for(index=1; index<=66; ++index) {if(!G[index].empty()) {break;}}dfs(index);if(mark==0){cout<<"The door cannot be opened."<<endl;continue;}int flag=1;int ans1=0,ans2=0;for(int i=1;i<=27;i++){if(indegree[i]==outdegree[i]){continue;}else if(indegree[i]-outdegree[i]==1&&ans1==0){ans1=1;}else if(outdegree[i]-indegree[i]==1&&ans2==0){ans2=1;}else{flag=0;break;}}if(mark==1&&flag==1){cout<<"Ordering is possible."<<endl;}else{cout<<"The door cannot be opened."<<endl;}}return 0;
}

poj1386(判断一个有向图是否存在欧拉回路)相关推荐

  1. HDU1878(判断一个无向图是否存在欧拉回路)

    1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题1:判断一个无向图是否有欧拉回路的充要 ...

  2. 【算法】判断一个有向图是单连通图

    本题对应于<算法导论>T22.3-13,题目如下: 网上找半天找不到,结合英文版答案自己写了一个 由于拓扑序列里面点v前面的点入度肯定都是0,找哪些是它的祖先就行了,弄个反图保存一下结果, ...

  3. 判断一个图是否为树(有向图以及无向图)

    整理的算法模板合集: ACM模板 目录 判断一个图是否为树 1. 无向图(hdu 1272 小希的迷宫) 2. 有向图(hdu 1325 Is It A Tree?) 判断一个图是否为树 1. 无向图 ...

  4. (HDU4324)判断一个图中是否存在两点的出度相同

    题目:Triangle LOVE 因为每两个点一定有且仅有一条指向边,那么先假定点按顺序1,2,....n,每个点一定指向后面的点,即1指向2,3,4.....n,2指向3,4,5....n..... ...

  5. linux判断是否能上网_母亲提醒女儿:判断一个男人是否值得嫁,从这两点就能轻易看出...

    没有哪个母亲不希望自己的女儿能够在长大之后嫁给一个出色的男人. 当然,这样的男人不需要有太多的钱或者出色的外貌,但必须得具备一定的人品. 我的一个朋友今年26岁,已经到了适婚年龄的她渴望着嫁给一个好男 ...

  6. python怎样判断一个文件是否存在_python如何判断一个文件是否存在

    python如何判断一个文件是否存在 发布时间:2020-09-23 11:38:42 来源:亿速云 阅读:82 作者:Leah python如何判断一个文件是否存在?针对这个问题,这篇文章详细介绍了 ...

  7. 判断一个IP区间(或IP)是否被另一个IP区间所包含

    以下方法实现判断一个IP是否被一个IP区间所包含 有一些静态方法可能引用了同名空间的自定义的类, 至于合并两个相临的IP段,可对其中的最大或最小IP+1 using System; using Sys ...

  8. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...

    Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...

  9. 用C语言编写:判断一个≥2的整型数是否存在于斐波那契数列中?

    自己写的,感觉挺有成就感的,就展示出来吧! 判断一个≥2的整型数是否存在于斐波那契数列中? 若存在,则返回第几项:若不在,则返回-1 #include <stdio.h> long gen ...

最新文章

  1. 使用Flink时遇到的问题(不断更新中)
  2. 卷积神经网络(CNN)小结
  3. 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(上)——网络
  4. HDU 4339 Query
  5. 三位数倒序数C语言,C语言求助!一个三位数的逆序数,总是编不对
  6. 【刷题】BZOJ 3653 谈笑风生
  7. Python学习笔记:用Python获取数据(本地数据与网络数据)
  8. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...
  9. 提高MyEclipse启动速度
  10. sublimetext能编辑html语言,SublimeText_编辑保存的Html乱码问题解决
  11. 安装linux版qq,安装二进制包编译器,安装mysql-5.6.11,删除已安装或安装失败的mysql-5.6.11,简单mysql练习题...
  12. [CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
  13. linux文件重定向用什么命令实现,Linux基础:文件描述符与重定向
  14. ROS配置ipv6方法
  15. SSO单点登录Java实现实例
  16. 台式机机箱前置面板音频无效(win10系统)
  17. MM采购订单及发票相关后台表介绍(图解)
  18. 为什么要清除浮动,目的是什么?
  19. opencv--颜色识别
  20. CSGO 制作cfg文件及一些常用命令

热门文章

  1. MySQL数据库中创建表并给某个字段添加数据
  2. python运算符(算数运算符、赋值运算符、复合赋值运算符、比较运算符、逻辑运算符)
  3. MATLAB_图形学_形态学课程_找出薛之谦的歌词所有字数
  4. 没想到图像直方图有这么多应用场景
  5. 轻松学Pytorch-使用卷积神经网络实现图像分类
  6. 混合云环境中扩展Kubernetes的挑战及方案
  7. javascript控件(二):一个好用的表格(分页实例)
  8. 浅析Kubernetes StatefulSet
  9. 常用 CSS 选择器
  10. myeclipse.ini内存参数设置及其含义