Code POJ - 1780(栈模拟dfs)
题意:
就是数位哈密顿回路
解析:
是就算了。。。尼玛还不能直接用dfs,得手动开栈模拟dfs
emm。。。看了老大半天才看的一知半解
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <cctype> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <bitset> #define rap(i, a, n) for(int i=a; i<=n; i++) #define rep(i, a, n) for(int i=a; i<n; i++) #define lap(i, a, n) for(int i=n; i>=a; i--) #define lep(i, a, n) for(int i=n; i>a; i--) #define rd(a) scanf("%d", &a) #define rlld(a) scanf("%lld", &a) #define rc(a) scanf("%c", &a) #define rs(a) scanf("%s", a) #define pd(a) printf("%d\n", a); #define plld(a) printf("%lld\n", a); #define pc(a) printf("%c\n", a); #define ps(a) printf("%s\n", a); #define MOD 2018 #define LL long long #define ULL unsigned long long #define Pair pair<int, int> #define mem(a, b) memset(a, b, sizeof(a)) #define _ ios_base::sync_with_stdio(0),cin.tie(0) //freopen("1.txt", "r", stdin); using namespace std; const int maxn = 1e6 + 10, INF = 0x7fffffff, LL_INF = 0x7fffffffffffffff; int n, tot, ss; int stk[maxn], cnt[maxn], ans[maxn]; //stk存最后的结果 cnt里存的是每层的dfs的i的值 ans里是每层没有取模时的v int f[maxn]; void no_dfs(int u) {while(cnt[u] < 10){int tmp = u * 10 + cnt[u];cnt[u]++;ans[tot++] = tmp; //为什么先记录 在取模呢? 因为我们需要的是每次的那个“边” ,而这个no_dfs函数的作用是求出来所有层的dfs在同一个i时的值 u = tmp % f[n-1];} }int main() {f[0] = 1;for(int i = 1; i <= 6; i++) f[i] = f[i-1] * 10;while(cin >> n && n){mem(cnt, 0);ss = tot = 0;no_dfs(0);while(tot){int x = ans[--tot];stk[ss++] = x % 10; //取模既能得到最后一位 也就是“边”no_dfs(x / 10); //相当于dfs中回溯到上一层 }for(int i = 0; i < n - 1; i++)cout << "0";for(int i = ss - 1; i >= 0; i--)cout << stk[i];cout << endl;}return 0; }
转载于:https://www.cnblogs.com/WTSRUVF/p/9784050.html
Code POJ - 1780(栈模拟dfs)相关推荐
- leetcode:365. 水壶问题【肥鼠定理,栈模拟dfs】
分析:数学 显然最后的z是a和b的线性组合 也就是ax + by = z也就是说z是(a,b)的倍数 那就直接用gcd就好了 加个特判 ac code class Solution:def canMe ...
- HDU 3328 Flipper 栈 模拟
HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...
- 227 用栈模拟汉诺塔问题
原题网址:https://www.lintcode.com/problem/mock-hanoi-tower-by-stacks/description 描述 在经典的汉诺塔问题中,有 3 个塔和 N ...
- Codeforces 926E - Merge Equal Elements(栈 + 模拟)
You are given a sequence of positive integers a 1, a 2, -, a n. While possible, you perform the foll ...
- 每日一套codeforce集训1119E[贪心],821C[栈模拟],645D[拓扑排序]
有n种长度的棍子,长度分别为2^0 ,2 ^ 1,-,2 ^ (n-1) ,每种棍子有a[i] 种,问你能组成多少个三角形. 三角形两边之和大于第三边,而2 ^ i + 2 ^ i = 2 ^ (i+ ...
- P1944 最长括号匹配(栈模拟/DP)
P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...
- 【干货】容器适配器实现两个栈模拟队列
用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...
- 括号配对问题----栈模拟
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- 栈模拟递归 遍历二叉树的正确写法
栈模拟递归 遍历二叉树的正确写法 二叉树的生成 树的层次遍历 前中后序遍历的递归实现 关于栈的实现 Reference 对于二叉树的生成,遍历,应该是树这个数据结构需要的基本功,只有真的理解了树的生成 ...
最新文章
- Installshield 2015 实现检测某安装文件是否存在并运行安装
- idea自动生成类注释和方法注释
- end_form_tag 已经在rails2.x中去掉了
- jsp学习之包含——include
- 浅谈.Net Core DependencyInjection源码探究
- python处理滑块验证码_使用python实现滑动验证码
- Linux虚拟机下使用USB转串口线——配置minicom、以及screen的使用
- phpeditor编写php_php常用开发编辑器(ide)
- 被弃用的 Docker 会被 Podman 取代吗?
- HAOI2011 Problem b 洛谷P2522
- 天体物理科研作图格式-要求-plot_example.py
- 【HTML 教程系列第 10 篇】什么是 HTML 中的水平线标签 hr
- 一壶浊酒尽余欢、今宵别梦寒!
- U盘重装Win10系统教程
- HW算法题:判断字符串子序列
- 水泵泵宝显示下池缺水但是水池水很满_水泵控制器不能自动怎么办 显示下池缺水如何处...
- 为什么需要稀疏编码及解释
- 认识Apache Bookkeeper
- Algorithm - Bubble Sort(Java)
- 二本Java小菜鸟4面字节跳动被秒成渣渣,深度集成!