首页 > 代码库 > 【搜索练习】

【搜索练习】

n的全排列

题目描述

输入一个整数n,输出的n的全排列。

输入

 

输出

 

样例输入

3

样例输出

1 2 31 3 22 1 32 3 13 1 23 2 1

技术分享
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;int n;int visi[1005],a[1005];void print(int x) {     for(int i=1;i<x;++i)printf("%d ",a[i]);     printf("%d",a[x]);     puts("");} void dfs(int cur) {     if(cur==n+1)print(cur-1);     else for(int i=1;i<=n;i++)     {         if(!visi[i])         {             a[cur]=i;             visi[i]=1;             dfs(cur+1);             visi[i]=0;         }     } } int main(){    cin>>n;    dfs(1);    puts("");    return 0;}
9018 1541

 









 

1542: n个数中取m个数从小到大排列

题目描述

n个数中取m个数从小到大排列,详见样例。

输入

 

输出

 

样例输入

3 2

样例输出

1 21 32 3

当你要输出全排列的时候,你的cur是到N+1的时候结束

 那么cur记录的是当前答案长度是多少 
 那么你要取M个 答案长度就是M
他是按照字典序输出的 
你搜索的时候找这个位置上的数是多少肯定是for1到n
那么先输出的肯定是字典序最小的

所以就不需要考虑排序的问题啦





【搜索练习】