Fleury算法
关于为什么不选桥
因为选桥之后会变成两个联通分支,这时由于可能产生的新联通分支不是孤立顶点,他俩都不联通了,那么也就绝对不可能“一笔画”走下来了
关于为什么可以选除桥之外的任意一条边走
本质原因是因为环与环嵌套后这俩环是没有内外之分的,所以说你任意选一条边本质是选择在哪个环上走,而你走任何一个环最后都是回到出发点,所以就随便走
其实欧拉图就是环套环或者环套环套环或者环套环套环套环或者...的图
#include<bits/stdc++.h>
using namespace std;
int mtx[][];
int deg[];
bool vis[];
bool dfs(int u,int v){
vis[u]=;
if(u==v)
return ;
for(int i=;i<;i++){
if(mtx[u][i]&&!vis[i]){
if(dfs(i,v))
return ;
}
}
return ;
}
bool not_bridge(int u,int v){ //判桥用dfs判的
memset(vis,,sizeof(vis));
mtx[u][v]=mtx[v][u]=;
int x=;
for(int i=;i<;i++){
if(mtx[u][i])
x++;
}
if(!x)
return ;
for(int i=;i<;i++){
if(mtx[u][i]){
if(dfs(i,v)){
mtx[u][v]=mtx[v][u]=;
return ;
}
}
}
mtx[u][v]=mtx[v][u]=;
return ;
}
int fa[];
int getfa(int x){ //并查集判一下是不是只有一个连通分量
while(x!=fa[x])
x=fa[x];
return x;
}
void joint(int u,int v){
fa[getfa(v)]=getfa(u);
}
int main(){
int n;
cin>>n;
char t[];
int minch='z'+-'A';
for(int i=;i<=;i++)
fa[i]=i;
for(int i=;i<=n;i++){
cin>>t;
int u=t[]-'A';
minch=min(minch,u);
int v=t[]-'A';
minch=min(minch,v);
if(getfa(u)!=getfa(v))
joint(u,v);
mtx[u][v]=;
deg[u]++;
mtx[v][u]=;
deg[v]++;
}
int prefa=-;
for(int i=;i<=;i++){
if(deg[i]){
if(prefa==-)
prefa=getfa(i);
else{
if(prefa!=getfa(i)){
puts("No Solution");
return ;
}
}
}
}
int odd=;
for(int i=;i<;i++){
if(deg[i]%){
odd++;
}
if(odd>){
puts("No Solution");
return ;
}
}
if(odd==){
minch='z'+-'A';
for(int i=;i<;i++){
if(deg[i]%){
minch=min(minch,i);
}
}
}
queue<int> Q;
Q.push(minch);
while(!Q.empty()){
int temp=Q.front();
Q.pop();
cout<<(char)(temp+'A');
for(int i=;i<;i++){
if(mtx[temp][i]&¬_bridge(temp,i)){
mtx[temp][i]=mtx[i][temp]=;
Q.push(i);
break;
}
}
}
return ;
}
//后来我学了hierholzer,强烈建议大家去学这个算法啊,实用多了
Fleury算法的更多相关文章
- 【欧拉回路】【Fleury算法】CDOJ1642 老当益壮, 宁移白首之心?
题意: 构造一个01串,使得满足以下条件: 1. 环状(即首尾相连) 2. 每一位取值为0或1 3. 长度是2^n 4. 对于每个(2^n个)位置,从其开始沿逆时针方向的连续的n位01串(包括自己) ...
- 【欧拉回路】【欧拉路径】【Fleury算法】CDOJ1634 记得小苹初见,两重心字罗衣
Fleury算法看这里 http://hihocoder.com/problemset/problem/1181 把每个点看成边,每个横纵坐标看成一个点,得到一个无向图. 如果新图中每个点的度都是偶数 ...
- Fleury算法 求欧拉回路
Fleury算法 #include <iostream> #include <cstdio> #include <cstring> #include <cma ...
- hiho欧拉路·二 --------- Fleury算法求欧拉路径
hiho欧拉路·二 分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇 ...
- CCF 第六次计算机职业认证 第四题 收货 stl动态存储和fleury算法的综合应用
问题描述 为了增加公司收入,F公司新开设了物流业务.由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道.然而,F公司现在只安排了小明一个人负责所有街道的服 ...
- Fleury算法求欧拉路径
分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇到问题. 小Ho:小 ...
- 简单的Fleury算法模板
假设数据输入时采用如下的格式进行输入:首先输入顶点个数n和边数m,然后输入每条边,每条边的数据占一行,格式为:u,v,表示从顶点u到顶点v的一条有向边 这里把欧拉回路的路径输出了出来: 手写栈: #i ...
- HihoCoder1182 欧拉路(Fleury算法)
描述 小Hi和小Ho破解了一道又一道难题,终于来到了最后一关.只要打开眼前的宝箱就可以通关这个游戏了. 宝箱被一种奇怪的机关锁住: 这个机关是一个圆环,一共有2^N个区域,每个区域都可以改变颜色,在黑 ...
- HihoCoder1181欧拉路(Fleury算法求欧拉路径)
描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角继续往前走,面前出现了一座石桥,石桥的尽头有一道火焰墙,似乎无法通过. 小Hi注意到在桥头有一张 ...
随机推荐
- Android 实现在Activity中操作刷新另外一个Activity数据列表
做android项目中遇到这样一个问题:有两个acticity,一个显示好友列表,另外一个显示会话列表,现在问题是在会话界面增加一个添加好友功能,添加好友后要求实时的刷新好友列表. 想了想,找了两种方 ...
- 邹欣,现代软件工程讲义:单元测试&回归测试
http://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html 邹欣, 现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试
- 关于InvokeMethod Activity的异步调用
讨论地址:http://www.cnblogs.com/foundation/archive/2009/12/17/1626617.html 结论是IsCompleted的设置被忽略,看代码里注释 u ...
- 递归,回溯和DFS的区别
递归是一种算法结构,回溯是一种算法思想一个递归就是在函数中调用函数本身来解决问题回溯就是通过不同的尝试来生成问题的解,有点类似于穷举,但是和穷举不同的是回溯会“剪枝”,意思就是对已经知道错误的结果没必 ...
- github push403错误的处理
如果没有什么别的问题的话,推荐使用SSH的方式.请参考:http://stackoverflow.com/questions/7438313/pushing-to-git-returning-erro ...
- swift - tableView数据向上收缩动画
// // TTTableViewController.swift // tableVIewAnimation // // Created by su on 15/12/11. // Copy ...
- Codeforces 766D Mahmoud and a Dictionary 2017-02-21 14:03 107人阅读 评论(0) 收藏
D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...
- After Upgrade To Release 12.1.3 Users Receive "Function Not Available To This Responsibility" Error While Selecting Sub Menus Under Diagnostics (Doc ID 1200743.1)
APPLIES TO: Oracle Application Object Library - Version 12.1.3 to 12.1.3 [Release 12.1] Information ...
- 我的第一个博客&GuiHub简单练习
个人介绍 姓名:马瑞 性别:男 班级:网络工程143 出生年月:1995.11 兴趣爱好:玩玩电脑,看看动漫. 编程能力:完全是菜鸟. GutHub的使用体验: 第一步:注册github,这很简 ...
- gitignore 使用
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...