2013年9月30日 星期一

[C/C++ 演算法]- 排列組合

[C/C++ 演算法]- 排列組合



剛才找資料時發現一個C/C++的教學網站,趕快發揮(C/P)的長才將它備份來,有需要的同好,歡迎來(C/P)一下^^。


拷貝來源:
http://openhome.cc/Gossip/AlgorithmGossip/
http://openhome.cc/Gossip/AlgorithmGossip/Permutation.htm









#include <stdio.h> 
#include <stdlib.h>
#define N 4

void
perm(int*, int, void (*)(int*));
void
rotate(int*, int, int);
void
copy(int*, int*);
void
print(int*);

int
main(void) {
int
num[N] = {1, 2, 3, 4};
perm(num, 0, print);
return
0;
}


void
perm(int* num, int i, void (*take)(int*)) {
if
(i < N) {
int
j;
for
(j = i; j < N; j++) {
int
to[N];
copy(num, to);
rotate(to, i, j);
perm(to, i + 1, take);
}
}
else { take(num); }
}


void
rotate(int* num, int i, int j) {
int
tmp = num[j];
int
k;
for
(k = j; k > i; k--) {
num[k] = num[k - 1];
}

num[i] = tmp;
}


void
copy(int* from, int* to) {
int
i;
for
(i = 0; i < N; i++) {
to[i] = from[i];
}
}


void
print(int* num) {
int
i;
for
(i = 0; i < N; i++) {
printf("%d ", num[i]);
}

printf("\n");
}


 


 




沒有留言:

張貼留言