查看單個文章
舊 2005-07-24, 02:18 AM   #3 (permalink)
snoopy
註冊會員
 
snoopy 的頭像
榮譽勳章
UID - 33737
在線等級: 級別:49 | 在線時長:2676小時 | 升級還需:24小時級別:49 | 在線時長:2676小時 | 升級還需:24小時級別:49 | 在線時長:2676小時 | 升級還需:24小時級別:49 | 在線時長:2676小時 | 升級還需:24小時
註冊日期: 2003-02-02
VIP期限: 2011-06
住址: 台南共和國
文章: 1831
精華: 0
現金: 12744 金幣
資產: 12834 金幣
預設

/*
* -------------------------------
* 排列組合的產生(字典順序) *
* -------------------------------
*/

#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");
}
}
snoopy 目前離線  
送花文章: 623, 收花文章: 392 篇, 收花: 1288 次
回覆時引用此帖