如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
共3*2*1=6种
代码简单实现n个元素的全排列
#include
#define N 5
int a[100];//存放数字序列
int mark[100];//判断数字是否使用过,mark[3]=1表示3这个数字能用
int count;
void dfs(int i,int a[N]);
int main(int argc, char *argv[])
{
int i;
for(i=0;i<=N;i++){//多初始化一位
mark[i]=1;//1代表该数可以使用
a[i]=0;//初始化序列
}
dfs(0,a);//没有数字放入a中
printf("hava %d nums\n",count);
return 0;
}
void dfs(int i,int a[N]){
if(i==N){//已经放入了所需数目的数字
int i;//输出序列
for(i=0;i
printf("%d ",a[i]);
}
printf("\n");
count++;
return;//输出后一定要返回
}
//尝试数字1到n
int n;
for(n=1;n<=N;n++){
if(mark[n]){//如果数字可以使用
a[i]=n;//将数字存入序列
mark[n]=0; //数字已经使用,将mark中数字状态改变
dfs(i+1,a);//尝试放入i+1个数字
mark[n]=1; //搜索完成后,该数字可用
}
}
}
n为3时
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
hava 6 nums