分析
对 1 2 3 进行全排列: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 共有六种情况,可以发现:对1 2 3 的全排列可以分成以1为首的全排列、以2为首的全排列、以3为首的全排列三个子问题,而每个子问题又可以分成以其余两个数为首的全排列。把问题转化为规模缩小了的同类问题的子问题,这样一来我们就可以通过递归来解决这个问题了。
代码
#include<stdio.h>
void swap(
int a[],
int i,
int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
void perm(
int a[],
int p,
int q){
int i;
if(p==q){
for(i=
0;i<
4;i++){
printf(
"%d ",a[i]);
}
printf(
"\n");
}
for(i=p;i<=q;i++){
swap(a,p,i);
perm(a,p+
1,q);
swap(a,p,i);
}
}
int main(){
int a[
4]={
1,
3,
4,
5};
perm(a,
0,
3);
return 0;
}
还有不明白的可以看这个视频: http://www.tudou.com/programs/view/nnndforCugA/?FR=LIAN
转载请注明原文地址: https://ju.6miu.com/read-32922.html