题目描述
blablabla
样例
//算法设计思想:递归出口同样是当前的位置pos大于所输入的数的位数的时候结束。
//关键在于判断当前的数是否出现过,如果出现过则不选,如果没出现过让当前所在的位置等于这个数,并且标记为出现过。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int a[10];
int used[10];
void dfs(int pos){
//printf("pos:%d\n",pos);
if(pos>n){
for(int i=1;i<=n;i++){
printf("%d ",a[i]);
}
printf("\n");
return;
}
for(int i=1;i<=n;i++){
if(!used[i]){
used[i]=true;
a[pos]=i;
dfs(pos+1);
used[i]=false;
//恢复现场的时候前面怎么操作的,后面进行相反的操作。
}
}
return;
}
int main(){
scanf("%d",&n);
dfs(1);
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla