/*
* -------------------------------
* 排列組合的產生(字典順序) *
* -------------------------------
*/
#include <stdio.h>
#define N 4
int p[N+1];
void perm(int);
void main(void)
{
int i;
for (i=1;i<=N;i++) /* 初始設定 */
p[i]=i;
perm(1);
}
void perm(int i)
{
int j,k,t;
if (i<N){
for (j=i;j<=N;j++){
t=p[j]; /* p[i]∼p[j]的向右移動 */
for (k=j;k>i;k--)
p[k]=p[k-1];
p[i]=t;
perm(i+1); /* 遞迴呼叫 */
for (k=i;k<j;k++) /* 將陣列排列還原成遞迴呼叫前的狀況 */
p[k]=p[k+1];
p[j]=t;
}
}
else {
for (j=1;j<=N;j++) /* 顯示排列組合 */
printf("%d ",p[j]);
printf("\n");
}
}
|