当前位置: 首页 > news >正文

洛谷P1341 无序字母对

众所周知, 无向图的一笔画条件为 所有点的度为偶数 或 有且只有两个点的度为奇数

但是,怎么输出一笔画的路径?

https://blog.csdn.net/stillxjy/article/details/51956183

介绍了一种好用的Hierholzer 算法;

大体是利用栈的思想记录.

附上压行代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXN = (26 + 2) << 1;

inline int getnum(char ch)
{
    return ch >= 'a' ? ch - 'a' + 27: ch - 'A';
}

int N;
int g[MAXN][MAXN];
int deg[MAXN];
vector<int> ans;

void dfs(int cur){
    for(int i = 0; i < MAXN; i++) if(g[cur][i]){
        g[cur][i] = g[i][cur] = false ;
        dfs(i);
    }
    ans.push_back(cur);
}

int main()
{
    cin>>N;
    for(int i = 1; i <= N; i++){
        char u, v;
        scanf(" %c%c", &u, &v);
        g[getnum(u)][getnum(v)] = g[getnum(v)][getnum(u)] = true;
        ++deg[getnum(u)], ++deg[getnum(v)];
    }

    int cnt = 0, fir;
    for(int i = 0; i < MAXN; i++) if(deg[i] & 1) ++cnt;
    if(!((cnt == 0) || (cnt == 2))) return puts("No Solution"), 0;

    if(cnt == 2) for(int i = 0; i < MAXN; i++) {if(deg[i] & 1) {fir = i; break;}}
    else for(int i = 0; i < MAXN; i++) if(deg[i]) {fir = i; break;}

    dfs(fir);
    for(int i = ans.size() - 1; i >= 0; --i)
        putchar((char) ans[i] >= 27 ? ans[i] - 27 + 'a' : ans[i] + 'A');
    return 0;
}

 

转载于:https://www.cnblogs.com/wsmrxc/p/9290364.html

相关文章:

  • 十三、数据源的配置
  • Promise 使用技巧九则
  • Linux ,强制更新只读文件,强制写入命令
  • 卸载pip工具
  • Ubuntu 12.04将默认集成Landscape管理套件【转】
  • 基础技能 | Git
  • SPP-net原理解读
  • [HDU3710]Battle over Cities
  • Vue学习笔记4
  • 你知道吗?一把能打开100000亿新兴市场的钥匙就攥着你手里!
  • Faiss教程:基础
  • 你的鞋都比你聪明
  • [CF226E]Noble Knight's Path
  • SQL Server内幕之预估与实际执行计划
  • [笔记] 四边形不等式
  • co模块的前端实现
  • CSS 三角实现
  • Linux CTF 逆向入门
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Python爬虫--- 1.3 BS4库的解析器
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue官网教程学习过程中值得记录的一些事情
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 每天一个设计模式之命令模式
  • 你真的知道 == 和 equals 的区别吗?
  • 前嗅ForeSpider采集配置界面介绍
  • 使用agvtool更改app version/build
  • 系统认识JavaScript正则表达式
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $(function(){})与(function($){....})(jQuery)的区别
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (三分钟)速览传统边缘检测算子
  • (轉)JSON.stringify 语法实例讲解
  • 、写入Shellcode到注册表上线
  • .NET Core 中插件式开发实现
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • [ 转载 ] SharePoint 资料
  • [20161101]rman备份与数据文件变化7.txt
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [BZOJ3223]文艺平衡树
  • [C\C++]读入优化【技巧】
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [CodeForces-759D]Bacterial Melee
  • [Docker]五.Docker中Dockerfile详解
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [Luogu 3958] NOIP2017 D2T1 奶酪
  • [NKCTF 2024]web解析