1. 程式人生 > 其它 >全排列輸出 c語言

全排列輸出 c語言

輸出n的全排列,排列輸出按照字典序

遞迴總是覺得越學越不懂啊...

#include<stdio.h>

void swap(int *a,int *b){ //交換
    int t;
    t=*a;
    *a=*b;
    *b=t;
}

void copy(int s,int e,int *arr1,int *arr2){ //複製陣列  現在想想感覺用strcpy好像也行?
    int i;
    for(i=s;i<=e;i++) arr1[i]=arr2[i];
}

void farr(int *arr,int s,int e){        //farr可以輸出arr陣列中從s到e的全排列
int i; int tem[10]; if(s==e){ for(i=0;i<=e;i++) printf("%d",arr[i]); printf("\n"); return; } else{ for(i=s;i<=e;i++){ //依次將第i個元素與首元素交換
       //每次交換後需要記錄之前的順序,
       //如123,213,312就是先把1與1交換得到123,記錄,輸出後面元素的全排列,
       //恢復至123,再將12交換得到213,記錄,輸出後面元素的全排列,恢復至213,
       //再將23交換得到312,記錄,輸出後面元素的全排列
swap(&(arr[s]),&(arr[i]));交換 copy(s,e,tem,arr);//儲存此處陣列用於復原 farr(arr,s+1,e);//輸出首元素後面元素的全排列 copy(s,e,arr,tem);//復原陣列 } return; } } int main(){ int i,n; int arr[10]; scanf("%d",&n); for(i=0;i<=n-1;i++) arr[i]=i+1
; farr(arr,0,n-1); return 0; }