老当益壮, 宁移白首之心?

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit  Status
请构造一个01串,使其满足以下条件:

环状(即首尾相连)
每一位取值为0或1
长度是2^n
对于每个(2^n个)位置,从其开始沿逆时针方向的连续的n位01串(包括自己)构成的数均不相同,即0到(2^n)−1中的数各出现一次

Input

输入一个整数n(1≤n≤15)

Output

输出任一一个长度为2n且满足题意的01串(顺逆时针均可),保证输入有解。

Sample input and output

Sample Input Sample Output

3                             00010111

Hint

样例的00010111,对于每个位置,沿逆时针方向连续长度为3的01串有:000,001,010,101,011,111,110,100即为0−7的所有数字

Source

2017 UESTC Training for Graph Theory

UESTC 1642 老当益壮, 宁移白首之心?

My Solution

题意:构造一个01串,使其满足以下条件:
环状(即首尾相连)
每一位取值为0或1
长度是2^n
对于每个(2^n个)位置,从其开始沿逆时针方向的连续的n位01串(包括自己)构成的数均不相同,
即0到(2^n) - 1中的数各出现一次

欧拉回路、Fleury算法
考虑用一条边表示一个数,那么题目要求就是无重复的遍历完所有边,
则这是一个欧拉图的问题。
对于有公共点的两条边,第一个的后n-1位和第二个的前n-1相同。
这样将一条边的前n-1位和后n-1位作为点,连边,这样来表示它。
如:对于01101,我们可以从0110向1101建一条有向边表示01101.
于是所建图有2^(n-1)个点,和2^n条边。
对于任一两个点,如果它们的前n-2位和后n-2位相同,就连一条有向边,
这样所得到的图一定是欧拉图,
因为每个点的入度和出度都是2,一定存在欧拉回路。
时间复杂度 O(V + E)
空间复杂度 O(V + E)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>using namespace std;
typedef long long LL;
typedef pair<int, int> ii;
const int MAXN = (1<<14) + 8;
const int MAXM = (1<<15) + 8;vector<ii> adj[MAXN];
bool vis[MAXM];inline void add(int x, int y, int z){ //z is the edge who disjoint x and y.adj[x].push_back(ii(z, y));
}
vector<int> path;
inline void dfs(int u){int v, e;while(!adj[u].empty()){v = adj[u].back().second, e = adj[u].back().first;adj[u].pop_back();if(!vis[e]){vis[e] = true;dfs(v);path.push_back(e);}}
}
inline bool get_path(){int i, j, sz;int origin = 0;path.clear();memset(vis, false, sizeof vis);dfs(origin);return true;
}int main()
{#ifdef LOCALfreopen("i.txt", "r", stdin);//freopen("i.out", "w", stdout);int T = 1;while(T--){#endif // LOCAL//ios::sync_with_stdio(false); cin.tie(0);int n, u, v, i;//cin >> n;scanf("%d", &n);for(i = 0; i < (1<<n); i++){u = i >> 1;v = i % (1<<n-1);add(u, v, i);}get_path();int sz = 1<<n;for(i = 0; i < sz; i++){putchar(char('0' + (path[i] & 1)));}putchar('\n');#ifdef LOCALcout << endl;}#endif // LOCALreturn 0;
}

Thank you!

------from ProLights

UESTC 1642 老当益壮, 宁移白首之心? 欧拉回路、Fleury算法相关推荐

  1. 离散数学实验-01 可简单图化,连通图和欧拉图的判断(利用Fleury算法输出欧拉回路)

    离散数学的实验 实验要求 给定一非负整数序列(例如:(4,2,2,2,2)). 判断此非负整数序列是否是可图化的,是否是可简单图化的. 如果是可简单图化的,根据Havel定理过程求出对应的简单图,并输 ...

  2. 【欧拉回路】【欧拉路径】【Fleury算法】CDOJ1634 记得小苹初见,两重心字罗衣...

    Fleury算法看这里 http://hihocoder.com/problemset/problem/1181 把每个点看成边,每个横纵坐标看成一个点,得到一个无向图. 如果新图中每个点的度都是偶数 ...

  3. Fleury算法 求欧拉回路

    Fleury算法 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include ...

  4. 使用tarjan算法和fleury算法求解中国邮递员问题

    一.代码思路 1.首先使用结构体的二维数组储存图. 2. 然后使用另外一个结构体二维数组储存相邻点间有几条边. 3.使用floyd算法求出两点间的最短距离. 4.fleury算法的原则"除非 ...

  5. Fleury算法找欧拉环游

    算法思路 任意选择一个顶点v0v0v_0, 假设已经确定好了前面的路径了.在剩下的边中选一个新的边 这个新的边需要跟它前面的那个点要相关联 除非没有点可以选,否则不能是剩余子图的割边. 一直到等这个步 ...

  6. Fleury算法-欧拉图

    文章目录 欧拉图 Fleury算法 欧拉图 欧拉图:所有节点度数均为偶数 欧拉路:仅有2个奇度数节点 欧拉图(eular graph):经过每个边仅一次走完图 桥:删去此边,图就不连通 def isE ...

  7. 踱步狼注释移除,状态机算法更新2019.10.16

    http://yaolixing.oltag.com/gn-2F751A0E-1263-4A3B-87BB-2DB5892892D1.html

  8. fleury求欧拉环游算法 matlab,Fleury算法求欧拉路径

    分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇到问题. 小Ho:小 ...

  9. fleury MATLAB,数学建模部分源码分享

    写在前面 数学建模竞赛已经结束了.由于种种原因最终无缘国奖,还是很难受的.结合我的经历,有一些想法想告诉所有正在准备数学建模竞赛的同学. 数学建模竞赛它不会绝对相信实力,运气真的是必须考虑的一部分. ...

最新文章

  1. windows7安dns服务器_在Windows 7 上安装DNS服务器bind9方法详解
  2. java linux urlencode_java字符编码转换研究(转)
  3. 白话Elasticsearch14-深度探秘搜索技术之基于multi_match 使用most_fields策略进行cross-fields search弊端
  4. using(){},Close(),Dispose()的区别
  5. go 初学者 错误_初学者的颠簸之旅,发现了一些不错的错误
  6. a*算法流程图_B端产品如何画好流程图?
  7. php fwrite服务器上写不进去_使用PHP来简单的创建一个RPC服务
  8. Linux 系统编程技巧与概念 第11章 不透明指针
  9. SpringMVC-01-基本组件与注解式编程
  10. JavaScript高级程序设计(读书笔记)(七)
  11. JavaScript原理(一)
  12. 微信群打卡小程序_微信群不好管理?这几款小程序帮你管理微信群
  13. html日历页面节假日_基于jquery实现可查询节假日万年历代码
  14. 简简单单批量安装windows主机
  15. Cond:条件变量源码解读
  16. Unity得到屏幕宽度
  17. MobiCom2015阅读表(Poster)
  18. 12款好用的Visual Studio插件,最后一款良心推荐
  19. Gif添加文字怎么操作?如何在线gif动图上添加文字?
  20. 多项式:从什么都不知道到门都没入

热门文章

  1. 网络安全 与 加密算法
  2. H3C交换机堆叠操作
  3. 【使用ip地址进入百度】
  4. java 画爱心壮那首歌最,抖音简单爱心所爱是什么歌 简单爱心所爱是什么歌名歌词介绍...
  5. 帕金森病MPTP小鼠模型 MPTP小鼠模型用来测试许多不同类型的药物的疗效
  6. 圆柱、圆锥的侧面积和球的表面积公式推导(不用积分)
  7. c语言趣味程序设计过桥,C语言趣味程序设计–题目百例.doc
  8. 单片机学习笔记(一)
  9. 放纵不羁的自由,满载而归的喜悦
  10. CSharpGL(56)[译]Vulkan入门