专注于技术 心无旁骛 - justforfan528

Linux技术| 网络编程coding | 网络安全Cyber Security | study |

 

导航

MyMath_CPP.h ---- 我的数学库

 1 // MyMath_CPP.h
 2 // 描述:
 3 //        常见数学问题的解决方法
 4 //        1) Perm----全排列问题
 5 
 6 typedef void (__stdcall *PMA)();
 7 
 8 static PMA pfcn;
 9 
10 template<class T>
11 static inline Swap(T &a, T &b)
12 {
13     T tmp;
14     tmp = a;a = b; b=tmp;
15 }
16 
17 template<class T>
18 static void Search(T *array, int k, int m)
19 {
20     int i;
21     if (k == m) {
22         (*pfcn)();
23     }
24     else
25         for (i = k; i <= m; i++) {
26             Swap(array[i],array[k]);
27             Search(array, k +1,m);
28             Swap(array[i],array[k]);
29         }
30 }
31 
32 // 功能:
33 //        求出 array[SrartIndex]到array[EndIndex]之间的元素(包括array[SrartIndex], array[EndIndex])
34 //        的全排列,并对每个排列执行一次pLastFn函数
35 template<class T>
36 void Perm(PMA pLastFn, T *array, int StartIndex, int EndIndex)
37 {
38     pfcn = pLastFn;
39     Search(array, StartIndex, EndIndex);
40 }

posted on 2007-02-01 17:28  游荡者  阅读(592)  评论(0编辑  收藏  举报