#include<stdio.h> #define SWAP(a,b,t) ((t)=(a),(a)=(b),(b)=(t)) void perm(char *list,int i,int n) { int j; int temp; if(i == n) //一個(gè)全排列已經(jīng)完成,打印整個(gè)排列 { for(j = 0; j <=n; j++) { printf("%c",list[j]); } printf(" "); } else { for(j = i; j <= n; j++) { SWAP(list[i],list[j],temp); //依次將1,2,...n個(gè)元素放在第一個(gè)位置 perm(list,i+1,n); //遞歸進(jìn)行全排列 SWAP(list[i],list[j],temp); //由于第一個(gè)SWAP將第j個(gè)元素放到第一個(gè)位置進(jìn)行了 //遞歸全排列,這里就將列表還原,以進(jìn)行第2次遞歸 } } }
int main() { char list[3] = {'a','b','c'}; perm(list,0,2); return 0; } |
|