n个数全排列

来源:互联网 发布:济南知远心理咨询中心 编辑:程序博客网 时间:2024/06/09 19:46

如题,思路:

例如n==3,    a[n]= {1,2,3}

1,2,3可以打头,

1打头时,2,3可以打头(1不被考虑),

在1打头时,2打头(第二个数),只剩下3即1,2,3

在1打头时3打头(第二个数),只剩下2即1,3,2

以此类推


代码如下,转载自老师(#_#!)


#include<stdio.h>#define n 3int a[n];void dfs(int t){    int i,temp;    if(t==n-1)    {        for(i=0;i<n;i++)            printf("%d ",a[i]);        printf("\n");    }else    {        for(i=t;i<n;i++)        {            temp=a[i],a[i]=a[t],a[t]=temp;            dfs(t+1);            temp=a[i],a[i]=a[t],a[t]=temp;//恢复原状        }    }}int main(){    for(int i=0;i<n;i++)        a[i]=i+1;    dfs(0);return 0;}