题意:

  就是数位哈密顿回路

解析:

  是就算了。。。尼玛还不能直接用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)相关推荐

  1. leetcode:365. 水壶问题【肥鼠定理,栈模拟dfs】

    分析:数学 显然最后的z是a和b的线性组合 也就是ax + by = z也就是说z是(a,b)的倍数 那就直接用gcd就好了 加个特判 ac code class Solution:def canMe ...

  2. HDU 3328 Flipper 栈 模拟

    HDU 3328 Flipper 栈 模拟 首先想说,英语太烂这题读了很长时间才读懂......题意是说输入有几张牌,然后输入这些牌的初始状态(是面朝上还是面朝下),然后输入操作方式,R表示翻一下右边 ...

  3. 227 用栈模拟汉诺塔问题

    原题网址:https://www.lintcode.com/problem/mock-hanoi-tower-by-stacks/description 描述 在经典的汉诺塔问题中,有 3 个塔和 N ...

  4. 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 ...

  5. 每日一套codeforce集训1119E[贪心],821C[栈模拟],645D[拓扑排序]

    有n种长度的棍子,长度分别为2^0 ,2 ^ 1,-,2 ^ (n-1) ,每种棍子有a[i] 种,问你能组成多少个三角形. 三角形两边之和大于第三边,而2 ^ i + 2 ^ i = 2 ^ (i+ ...

  6. P1944 最长括号匹配(栈模拟/DP)

    P1944 最长括号匹配 可以直接用栈模拟,把匹配好的标记一下, 最后找到最长的匹配输出即可. 如果是要求最长的长度的题那么只需要求数就行了,没必要把原序列真的按照题意改变 如果要求序列,那么只需要按 ...

  7. 【干货】容器适配器实现两个栈模拟队列

    用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...

  8. 括号配对问题----栈模拟

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  9. 栈模拟递归 遍历二叉树的正确写法

    栈模拟递归 遍历二叉树的正确写法 二叉树的生成 树的层次遍历 前中后序遍历的递归实现 关于栈的实现 Reference 对于二叉树的生成,遍历,应该是树这个数据结构需要的基本功,只有真的理解了树的生成 ...

最新文章

  1. Installshield 2015 实现检测某安装文件是否存在并运行安装
  2. idea自动生成类注释和方法注释
  3. end_form_tag 已经在rails2.x中去掉了
  4. jsp学习之包含——include
  5. 浅谈.Net Core DependencyInjection源码探究
  6. python处理滑块验证码_使用python实现滑动验证码
  7. Linux虚拟机下使用USB转串口线——配置minicom、以及screen的使用
  8. phpeditor编写php_php常用开发编辑器(ide)
  9. 被弃用的 Docker 会被 Podman 取代吗?
  10. HAOI2011 Problem b 洛谷P2522
  11. 天体物理科研作图格式-要求-plot_example.py
  12. 【HTML 教程系列第 10 篇】什么是 HTML 中的水平线标签 hr
  13. 一壶浊酒尽余欢、今宵别梦寒!
  14. U盘重装Win10系统教程
  15. HW算法题:判断字符串子序列
  16. 水泵泵宝显示下池缺水但是水池水很满_水泵控制器不能自动怎么办 显示下池缺水如何处...
  17. 为什么需要稀疏编码及解释
  18. 认识Apache Bookkeeper
  19. Algorithm - Bubble Sort(Java)
  20. 二本Java小菜鸟4面字节跳动被秒成渣渣,深度集成!

热门文章

  1. 接入gitment为hexo添加评论功能
  2. micro 架构组件介绍
  3. ios7之后的一些更改
  4. Uva 11178 Morley定理
  5. Installation error: INSTALL_FAILED_UID_CHANGED
  6. bootstrap table相关操作
  7. Spark源码分析之BlockManager
  8. spark基础之存储原理
  9. (55)FPGA基本约束-UCF与XDC(第11天)
  10. (49)Xilinx Subtracter IP核配置(十)(第10天)