链接:
链接
题目:
给定一个整数 nn,将数字 1∼n1∼n 排成一排,将会有很多种排列方法。
现在,请你按照字典序将所有的排列方法输出。
输入格式
共一行,包含一个整数 nn。
输出格式
按字典序输出所有排列方案,每个方案占一行。
数据范围
1≤n≤91≤n≤9
输入样例:
3
输出样例:
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
思路:
又是搜索,递归的思路,用一个数组来存储数字,用一个数组来存储现在数字的状态,用一个数字来存储现在枚举到哪个数字了,用循环不停地遍历,不停地更新,使用一个数字,就把那个数字对应的s数组置为true,表示使用过了,把循环变量的值给num数组里面的对应位置,然后递归,递归完了之后用过的这个数字更新为false,表示这个数字又可以被使用了
代码:
#include<iostream> using namespace std; int n; const int N=15; int num[N]; bool s[N]; void f(int u,int num[],bool s[]) { if(u>n) { for(int i=1;i<=n;i++) { cout<<num[i]<<" "; } cout<<endl; } else { for(int i=1;i<=n;i++) { if(!s[i]) { s[i]=true; num[u]=i; f(u+1,num,s); s[i]=false; } } } } int main() { cin>>n; f(1,num,s); return 0; }