题目
请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
思路
回溯算法,回溯算法主要就是适用于暴力破解,在时间足够的情况下运用递归穷举。
代码
#include<stdio.h>
#include<stdlib.h>
#define N 10
void BackTracking(int start,int index);
void Print();
int n;
int pr[N],visit[N];
void main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)
visit[i]=0;
BackTracking(1,0);
system("pause");
}
void BackTracking(int start,int index){
int i;
if(index==n){
Print();
return ;
}
for(i=start;i<=n;i++){
if(!visit[i]){
pr[index]=i;
visit[i]=1;
BackTracking(1,index+1);
visit[i]=0;
}
}
}
void Print(){
int i;
for(i=0;i<n;i++){
printf("%d",pr[i]);
}
printf("\n");
}
总结
学会运用回溯算法真的可以解决很多题目,例如组合,排列,求子集问题等都是明显的回溯算法的应用。