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

转载于:https://www.cnblogs.com/justforfan528/articles/637244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值