[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"); }
|
沒有留言:
張貼留言