题目链接:

poj1392

题意:

咬尾蛇是古埃及神话中一种虚构的蛇。它经常把尾巴放在自己的嘴巴里,不停地吞噬自己。环数类似于咬尾蛇,它是2n 位的二进制数,具有如下性质:它能“生成”0~2n-1 之间的所有数。生成方法是:给定一个环数,将它的2n 位数卷成一个圆圈,这样,就可以从中取出2n 组n 位二进制数,以每个数的起始位置的下一个位置,作为下一个数的起始位置。这样的圆圈称为n 的环圈。在本题中,只针对n 的最小的环数。
例如,但n = 2 时,只有4 个环数:0011,0110,1100 和1001,所以最小的环数为0011。
图5.18(a)给出了0011 的Ouroboros 圆圈。图5.18(b)所示的表格描述了o(n;k)函数:它的值为n 的最小的环数的环圈中的第k 个数。你的任务是编写程序,计算o(n;k)。

题解思路:

弗洛莱算法求解欧拉回路,将(n-1)位以内的所有二进制数当做图中的点,将0和1当做图中每个点的边,再根据dfs按顺序递归求解,即可得答案。

递归代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define maxn 1<<15
using namespace std;
vector<int>ans;
int cnt[maxn];
void dfs(int x,int tail)
{while(cnt[x]<2){int v=(x<<1)+cnt[x];cnt[x]++;dfs(v&tail,tail);ans.push_back(v);}
}
int main()
{int n,m,tail;while(scanf("%d%d",&n,&m)&&(n+m)){memset(cnt,0,sizeof(cnt));tail=(1<<(n-1))-1;dfs(0,tail);printf("%d ",ans[ans.size()-1-m]);cout<<endl;}return 0;
}

非递归代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#define maxn 1<<15
using namespace std;
vector<int>ans;
int cnt[maxn];
int st[maxn];
int ss;
void dfs(int x,int tail)
{while(cnt[x]<2){int v=(x<<1)+cnt[x];cnt[x]++;st[ss++]=v;x=v&tail;}
}
int main()
{int n,m,tail;while(scanf("%d%d",&n,&m)&&(n+m)){ss=0;memset(cnt,0,sizeof(cnt));tail=(1<<(n-1))-1;int dd=(1<<n)-2;dfs(0,tail);while(ss){int d=st[--ss];ans.push_back(d);dfs(d>>1,tail);}printf("%d ",ans[ans.size()-1-m]);cout<<endl;}return 0;
}

poj1392 Ouroboros Snake 欧拉回路相关推荐

  1. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  2. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  3. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  4. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  5. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

  6. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  7. poj题目详细分类及算法推荐题目

    DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  ...

  8. ACM POJ 题目分类(完整整理版本)

    DP: 1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题   ...

  9. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

  10. POJ,ZOJ题目分类(多篇整合版,分类很细致,全面)

    水题: 3299,2159,2739,1083,2262,1503,3006,2255,3094 初级: 一.基本算法:        (1)枚举 (1753,2965)       (2)贪心(13 ...

最新文章

  1. QTP连接oracle
  2. springboot oauth2 fetch 关于跨域请求的问题
  3. 保Cloudera弃Hortonworks,新平台将支持五大云供应商
  4. ASP.NET MVC3 301永久重定向实现程序
  5. ASP.NET MVC 实现模式 - ModelBuilder
  6. 软件测试有没有测试大纲文档,系统测试大纲(范例).docx
  7. mysql数据库优先_MySQL数据库配置文件之优先级
  8. Golang基本变量
  9. 连通子图什么意思_一道物理竞赛题揭开“希罗喷泉”的神秘面纱,到底什么物理原理?...
  10. MVC进阶学习--个性化目录结构(三)
  11. 爱情四十八课,深情淡如水
  12. 色差大调色难?实操讲解如何去除谷歌影像色差
  13. r语言插补法_R语言之缺失值和异常值处理
  14. 文件包含漏洞及简单绕过
  15. 20 C++ 秒数转换时分秒
  16. python模型保存:保存字典数据 checkpiont+ pth文件处理
  17. c语言空循环的作用是什么意思,C语言空循环和无穷循环有的区别
  18. matlab实现留一交叉验证,留出法和交叉验证
  19. IoTeX 对话 浙江大学Bithacks:当物联网遇上区块链
  20. OCR(Optical Character Recognition,光学字符识别)技术详解

热门文章

  1. html在表格输入文字不显示,Word表格中有部分格子内无法输入文字是怎么回事?...
  2. win10安装过程修改esp分区吗_win7/win10无损修改UEFI启动模式让系统5秒开机支持ghost版...
  3. node学习记三之vue与安装的模块(d3\echarts\jquery)
  4. 小米手机自动进入Recovery恢复模式,且不停重启
  5. app支付宝验证登录
  6. Spring Bean装配以及依赖注入
  7. [Power Query]:自动提取自定义一周的数据
  8. 一小时人生服务器维护,TapTap《一小时人生》手游:说好的一小时人生模拟,我却只能活6分钟...
  9. 人工智能基础——知识的表示方法,产生式表示法
  10. X-Frame-Options响应头配置详解