POJ 1780 【手工递归】【欧拉回路】
题意:
1.提供密码的位数。
2.密码的输入可以一直保持,取后n位作为密码。如果密码正确则开锁。
3.设计一种方法使得在输入最少的情况下破译。(即保证每个密码只输入一次)
4.输出输入的数字的序列。
思路:
去密码的前n-1位作为状态节点,将n位数密码作为边。建造有向图。
显然,每个点的入度和出度都为10,则一定存在欧拉回路。
利用简单DFS寻找欧拉回路。
(这题好像是要求输出字典序最小的序列)
DFS应该不难写,但是这题如果直接递归会爆栈。所以需要手工用栈模拟递归的过程...
屌丝看了大神的关于递归定义的博客才对递归有了更深刻的理解...
博客地址:http://www.tuicool.com/articles/BrIVz2
==以前lz只是把递归当作快速插入代码的东西来用==
代码:
#include<stdio.h>
#include<string.h>
int n,e,tmpe,s;
bool out[][];
int road[];
int mypos[];
int pos[];
void solve()
{
int load=;
bool needop=;
int tmpn=;
memset(out,,sizeof(out));
memset(mypos,,sizeof(mypos));
pos[]=;
s=;
e=;
tmpe=;
for(int i=; i<=n; i++)
{
e*=;
}
tmpe=e/;
while(s)
{
if(load==)
{
mypos[s]=;
load=;
continue;
}
else if(load==-)
{
out[pos[s]][mypos[s]-]=;
load=;
continue;
}
else
{
if(mypos[s]==)
{
s--;
load=-;
continue;
}
else if(!out[pos[s]][mypos[s]])
{
mypos[s]++;
load=;
continue;
}
else
{
load=;
int tmp=(pos[s]-pos[s]/tmpe*tmpe)*+mypos[s];
road[s]=pos[s]*+mypos[s];
out[pos[s]][mypos[s]]=;
mypos[s]++;
s++;
pos[s]=tmp;
}
}
if(s>e)
break;
}
for(int i=;i<n;i++)
printf("");
for(int i=;i<=e;i++)
{
printf("%d",road[i]%);
}
printf("\n");
}
int main()
{
scanf("%d",&n);
while(n)
{
if(n==)
printf("0123456789\n");
else
solve();
scanf("%d",&n);
}
}
下面是直接递归的代码:
#include<stdio.h>
#include<string.h>
int n,e,tmpe;
bool out[][];
bool in[][];
bool vis[];
int road[];
int num;
bool dfs(int pos,int nn)
{
if(nn==e-)
return ;
for(int i=;i<;i++)
{
if(out[pos][i])
{
out[pos][i]=;
int tmp=(pos-pos/tmpe*tmpe)*+i;
road[nn]=pos*+i;
if(dfs(tmp,nn+))
return ;
out[pos][i]=;
}
}
return ;
}
void solve()
{
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(vis,,sizeof(vis));
e=;
tmpe=;
for(int i=;i<=n;i++)
{
e*=;
}
tmpe=e/;
dfs(,);
for(int i=;i<e-;i++)
{
printf("%d\n",road[i]);
}
}
int main()
{
scanf("%d",&n);
while(n)
{
if(n==)
printf("0123456789\n");
else
solve();
scanf("%d",&n);
}
}
POJ 1780 【手工递归】【欧拉回路】的更多相关文章
- POJ 1780 Code(欧拉回路+非递归dfs)
http://poj.org/problem?id=1780 题意:有个保险箱子是n位数字编码,当正确输入最后一位编码后就会打开(即输入任意多的数字只有最后n位数字有效)……要选择一个好的数字序列,最 ...
- poj 1780 , poj 1392 欧拉回路求前后相互衔接的数字串
两道题目意思差不多 第一题是10进制 , 第二题是2进制的 都是利用欧拉回路的fleury算法来解决 因为我总是希望小的排在前面,所以我总是先将较小数加入栈,再利用另一个数组接收答案,但是这里再从栈中 ...
- [欧拉回路+手动开栈] poj 1780 Code
题目链接: http://poj.org/problem? id=1780 Code Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- poj 1300 Door Man 欧拉回路
题目链接:http://poj.org/problem?id=1300 You are a butler in a large mansion. This mansion has so many ro ...
- POJ 2230 Watchcow(欧拉回路:输出点路径)
题目链接:http://poj.org/problem?id=2230 题目大意:给你n个点m条边,Bessie希望能走过每条边两次,且两次的方向相反,让你输出以点的形式输出路径. 解题思路:其实就是 ...
- poj 2337 && zoj 1919 欧拉回路+连通性判断
题目要求按字典序排列,而且可能有重边 所以一开始就将数组从大到小排列,那么我将字符串加入链表时就会令小的不断前移,大的被挤到后面 这里有一点问题就是我一开始使用的是qsort: int cmp(con ...
- poj 2083 Fractal 递归 图形打印
题目链接: http://poj.org/problem?id=2083 题目描述: n = 1时,图形b[1]是X n = 2时,图形b[2]是X X X ...
- poj 1780 Code
//题目描述:KEY公司开发出一种新的保险箱.要打开保险箱,不需要钥匙,但需要输入一个正确的.由n位数字组成的编码.这种保险箱有几种类型,从给小孩子玩的玩具(2位数字编码)到军用型的保险箱(6位数字编 ...
- poj 1780 code(欧拉路)
/* 对于n为密码想要序列最短 那么 1234 2345 这两个一定挨着 就是说 前一个的后n-1位是后一个的前n-1位 假设n==3 我们用0-99作为点的编号建图 然后每个点连出去10条边 两个相 ...
随机推荐
- 剑指offer8 旋转数组的最小数字
一种错误写法: class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { int len ...
- Windows下使用ffmpeg与java实现截取视频缩略图
[ffmpeg.exe可执行文件获取]: 网上搜索后得到编译好的ffmpeg文件,下载地址:http://download.csdn.net/source/453719 [安装]: 将下载的文件解压, ...
- JavaScript设计模式基础之面向对象的JavaScript(二)
多态 多态的实际含义:同一操作作用与不同的对象上面,可以产生不同的解释和不同的执行结果,就是说,给不同的对象发送同一个消息 的时候,这些对象会根据这个消息分别给出不同的反馈 代码如下: class D ...
- Manjaro安装SS客户端
首先安装shadowsocks-libev sudo pacman -S shadowsocks-libev 然后编辑配置文件 vim /etc/shadowsocks/config.json { & ...
- Springboot整合Shiro安全框架
最近在学习Springboot,在这个过程中遇到了很多之前都没有技术知识,学习了一阵子,稍微总结一些. ---- Shiro框架 shiro框架,是一个相对比较简便的安全框架,它可以干净利落地处理身份 ...
- Java之浅拷贝与深拷贝
----?浅拷贝 --- 概念 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.简单说,浅拷贝就是只复制所考虑的对象,而不复制它所引用的对象 --- 实现方 ...
- PHP+Apache2.x+phpMyAdmin安装和配置
1>各个部件的下载 目前在windows下开发 PHP官网下载地址:https://windows.php.net/download PHP有TS(ThreadSafe)和NTS两个版本,所以按 ...
- 如何用纯 CSS 创作文本滑动特效的 UI 界面
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QrxxaW 可交互视频教 ...
- 如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/LmrZVX 可交互视频教 ...
- Python数据结构--搜索树
''' 二叉搜索树(BST)是一棵树,其所有节点都遵循下述属性 - 节点的左子树的键小于或等于其父节点的键. 节点的右子树的键大于其父节点的键. 因此,BST将其所有子树分成两部分; 左边的子树和右边 ...