您的位置:首页 > 其它

蓝桥杯--算法提高 排列数 (简单dfs)

2016-01-11 15:55 330 查看
算法提高 排列数

时间限制: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<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int n;
int vis[20],num[20];
void bfs(int p,int s)
{
if(p==10)
{
n--;
if(n==0)
{
for(int i=0;i<=9;i++)
cout<<num[i];
cout<<endl;
}
return ;
}
for(int i=0;i<=9;i++)
{
if(!vis[i])
{
num[p]=i;
vis[i]=1;
bfs(p+1,i+1);
vis[i]=0;
}
}
}
int main()
{
while(cin>>n)
{
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
bfs(0,0);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: