#include <cstdio>//利用深度优先遍历穷举数列的可能性
#include <cstring>//就是一直的递归和回溯来穷举产生一个不同的排列
#include <iostream>
using namespace std ;
#define MAXN 101
int rst[MAXN] ;
void all_perm(int l , int r , int n) {
if(l == r) {//得到一个全排列就打印出来
for(int i = 0 ; i < n ; i ++) {
printf("%d" , rst[i]) ;
}
puts("") ;
return ;
}else {
for(int i = l ; i < r ; i ++) {
swap(rst[i] , rst[l]) ;//从一个位置开始穷举
all_perm(l + 1 , r , n) ;//递归穷举后面的数的位置
swap(rst[i] , rst[l]) ;//再回溯到当前的位置进行其他的排列穷举
}
}
}
int main(int argc, char const *argv[])
{
int cas ;
scanf("%d" , &cas) ; //产生一个1到cas的全排列
for(int i = 0 ; i < cas ; i ++) {
rst[i] = i + 1 ;
}
all_perm(0 , cas , cas) ;
return 0;
}
产生1~n的全排列
最新推荐文章于 2021-12-05 14:30:10 发布