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
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 }
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 }