算法提高 排列数
来源:互联网 发布:方正排版软件下载 编辑:程序博客网 时间:2024/05/02 04:26
时间限制:1.0s 内存限制:256.0MB
提交此题
问题描述
0、1、2三个数字的全排列有六种,按照字母序排列如下:
012、021、102、120、201、210
输入一个数n
求0~9十个数的全排列中的第n个(第1个为0123456789)。
输入格式
一行,包含一个整数n
输出格式
一行,包含一组10个数字的全排列
样例输入
1
样例输出
0123456789
数据规模和约定
0 < n <= 10!
#include <iostream>#include <cstdio>using namespace std;int A[11];const int n=10;char str[5000000][11];int cnt;int flag[10];//数组值为状态,下标是数字 int num;void dfs(int cur) { if(cur==n) { cnt++; if(cnt==num) { for(int k=0;k<n;k++) { printf("%d",A[k]); } printf("\n"); } } else for(int i=0;i<n;i++) { if(!flag[i]) { A[cur]=i; flag[i]=1; dfs(cur+1); flag[i]=0;//重新置零 } }}int main() { cin>>num; dfs(0); printf("%s\n",str[num]); return 0;}
简单的DFS全排列 注意超时
贴上我的超时代码
#include <iostream>#include <cstdio>using namespace std;int A[11];const int n=10;char str[5000000][11];int cnt;int num;void dfs(int cur) { if(cur==n) { cnt++; if(cnt==num) { for(int k=0;k<n;k++) { printf("%d",A[k]); } printf("\n"); } } else for(int i=0;i<n;i++) { A[cur]=i; int ok=1; for(int j=0;j<cur;j++) { if(A[cur]==A[j]) ok=0; } if(ok) dfs(cur+1); }}int main() { cin>>num; dfs(0); printf("%s\n",str[num]); return 0;}
互相比较一下:在于优化判断该数字是否已经使用
0 0
- 算法提高 排列数
- 算法提高 排列数
- 算法提高 排列数
- 算法提高 排列数
- 算法提高 排列数
- 算法提高 排列数
- 算法提高 排列数
- 蓝桥杯 算法提高 排列数
- 蓝桥杯-算法提高-排列数
- 蓝桥杯算法提高 排列数
- 蓝桥杯 算法提高 排列数
- 蓝桥杯 算法提高 排列数
- ADV-188 算法提高 排列数
- 蓝桥杯 ADV-188 算法提高 排列数
- 蓝桥杯--算法提高 排列数 (简单dfs)
- 【ShawnZhang】带你看蓝桥杯—— 算法提高 排列数
- 算法提高 逆序排列
- 算法提高 排列式
- linux的系统管理命令
- Genymotion 解决虚拟镜像下载速度特别慢的问题
- JavaScript高级程序设计-数组
- JAVA调用jython执行python文件
- 如何使用AWS和Rancher搭建弹性应用栈
- 算法提高 排列数
- Linux学习(3)应用程序与驱动程序是如何连接的?
- 数据结构与算法:逻辑分析
- leetcode 409. Longest Palindrome python
- CentOS 下安装maven3.04
- linux根目录下个文件夹作用及tar命令下C,V,Z,F作用
- UART驱动程序设计
- 关于Java Web 使用 iText 将数据库中的 表 的数据 生成 PDF 格式文件(升級版本)
- EffectiveJava(33) -- EnumMap详解(使用EnumMap代替序数)