欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径;(每条边只经过一次而不是点)
在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路;如果最多有2个奇数点,那么出发点和到达点必定为
该2点,那么这个路径就为欧拉路;(前提都是该图连通)
在有向图中:如果每个店的出度和入度都相同,那么为欧拉回路;如果最多只能有2个点的出度不等于入度,并且其中
一个点的 入度=出度+1,另一点的 入度+1=出度,那么为欧拉路;(前提图连通)

//因为字符从第一个到最后一个,所以用有向图
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
char ch[];
int map[][],n,m,pa[];
int r[],c[],vis[];
stack<int>s;
void inint()
{
  int i;
  for(i=;i<=;i++)
  {
    pa[i]=i;
  }
}
int find(int x)
{
  if(x!=pa[x])
    pa[x]=find(pa[x]);
  return pa[x];
}
int main()
{
  int i,j;
  int t;
  scanf("%d",&t);
  while(t--)
  {
    scanf("%d",&m);
    memset(vis,,sizeof(vis));
    inint();
    memset(r,,sizeof(r));
    memset(c,,sizeof(c));
    memset(map,,sizeof(map));
    for(i=;i<m;i++)
    {
      scanf("%s",&ch);
      int l=strlen(ch);
      map[ch[]-'a'+][ch[l-]-'a'+]=;
      r[ch[]-'a'+]++;c[ch[l-]-'a'+]++;
      int x,y;
      x=find(ch[]-'a'+);
      y=find(ch[l-]-'a'+);
      vis[ch[]-'a'+]=;
      vis[ch[l-]-'a'+]=;
      if(x!=y)
        pa[x]=y;
    }
    int sum=;
    for(i=;i<=;i++)
    {
      if(pa[i]==i&&vis[i])
      {
        sum++;
      }
      if(sum>)
        break;
    }
    if(sum>) //未连通
    {
      printf("The door cannot be opened.\n");
      continue;
    }
    sum=;
    for(i=;i<=;i++)
    {
      if(vis[i]&&(c[i]!=r[i]))//寻找出度入度不相同的点
      {
        sum++;
        s.push(i);
      }
    }
    if(sum>)//多余2个
      printf("The door cannot be opened.\n");
    else if(sum==)//出度入度全相同
      printf("Ordering is possible.\n");
    else if(sum==)
    {
      int x1,x2;
      x1=s.top();
      s.pop();
      x2=s.top();
      s.pop();
      if((c[x1]+==r[x1])&&(c[x2]==r[x2]+)||(c[x2]+==r[x2])&&(c[x1]==r[x1]+))//判断是否条件成立
      {
        printf("Ordering is possible.\n");
      }
      else printf("The door cannot be opened.\n");
    }
    else
      printf("Ordering is possible.\n");
  }
}

hdu1161 欧拉路的更多相关文章

  1. 洛谷P1341 无序字母对[无向图欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  2. POJ1386Play on Words[有向图欧拉路]

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11846   Accepted: 4050 De ...

  3. UVA10054The Necklace (打印欧拉路)

    题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...

  4. 洛谷 P1341 无序字母对 Label:欧拉路 一笔画

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  5. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  6. hihocoder 1181 欧拉路.二

    传送门:欧拉路·二 #1181 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其 ...

  7. hiho48 : 欧拉路·一

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的 ...

  8. hdu5883 The Best Path(欧拉路)

    题目链接:hdu5883 The Best Path 比赛第一遍做的时候没有考虑回路要枚举起点的情况导致WA了一发orz 节点 i 的贡献为((du[i] / 2) % 2)* a[i] 欧拉回路的起 ...

  9. hihoCoder #1182 欧拉路·三 (变形)

    题意: 写出一个环,环上有2^n个格子,每个格子中的数字是0或1,相连着的n个格子可以组成一个数的二进制,要求给出这2^n个数字的序列,使得组成的2^n个数字全是不同的.(即从0到2^n-1) 思路: ...

随机推荐

  1. 第30课 Qt中的文本编辑组件

    1. 3种常用的文本编辑组件的比较 单行文本支持 多行文本支持 自定义格式支持 富文本支持 QLineEdit (单行文本编辑组件) Yes No No No QPlainTextEdit (多行普通 ...

  2. java 26 - 9 网络编程之 TCP协议多用户上传文件

    TCP实现多用户上传文件: 需要同时给多用户上传文件,这样就得用多线程来实现. 实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权: 首先,创建个线程类:(这 ...

  3. C语言--指向多维数组的指针和指针数组

    #include <stdio.h> //void show(char *p[]); ]); int main(){ ][]={","abc","x ...

  4. github上写blog

    http://www.elbow95.me/blog/My-First-Blog-Essay.html 阮一峰的: http://www.ruanyifeng.com/blog/2012/08/blo ...

  5. 个人PHP开发环境的选择与搭建

    入职一个多月,重新调整了一下自己电脑的开发环境,现在写出来,算是作为自己的笔记. 如果你是该文章的读者,请忍受文章内的所有小章节都没有具体的步骤. 因为平时还要打游戏(划掉),所以电脑系统一直是Win ...

  6. BZOJ 2957 楼房重建

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  7. struts2: 通过流输出实现exce导出

    参考下面代码,在Action中加一个方法: // 导出excel public String excel() throws Exception { StringBuffer excelBuf = ne ...

  8. SQL 性能调优日常积累

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1)选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE 的解析器按照从右到左 ...

  9. c#新语法学习笔记

    1.匿名类 匿名类编译之后会生成一个具体的泛型类,匿名类的属性是只读的.在临时数据传递时非常方便(linq查询).匿名类中不能有方法.数据传输(json),数据查询(linq) }; 2.匿名方法匿名 ...

  10. bootstrap-datepicker带中文的js文件

    ) { $(".datepicker").datepicker({ language: "zh-CN", autoclose: true,//选中之后自动隐藏日 ...