多段图动态规划

 1  // 多段图的问题--动态规划
 2  #define  N 5
 3  #define  K 3
 4  #define  MAX 10000
 5  int  node[ 5 ][ 5 =  { {  - 1 1 2 3 - 1  }, {  - 1 - 1 - 1 - 1 4  }, {  - 1 - 1 - 1 ,
 6           - 1 1  }, {  - 1 - 1 - 1 - 1 3  }, {  - 1 - 1 - 1 - 1 - 1  } };
 7  int  cost[N];
 8  int  path[K];
 9  void  produreFGraph() {
10      cost[N - 1 =   0 ;
11       for  ( int  i  =  N  -   2 ; i  >=   0 ; i -- ) {
12           // 寻找第i个个结点,到目的节点的最小cost
13           int  len  =  MAX;
14           for  ( int  j  =  i  +   1 ; j  <  N; j ++ ) {
15               if  (node[i][j]  !=   - 1   &&  (node[i][j]  +  cost[j]  <  len)) {
16                  cost[i]  =  node[i][j]  +  cost[j];
17                  len  =  cost[i];
18                  path[i]  =  j;
19              }
20          }
21          cout  <<   " cost[ "   <<  i  <<   " ]: "   <<  cost[i]  <<  endl;
22      }
23      cout << " path: " << 0 << " -- " ;
24       for  ( int  i  =   0 ; i  !=  N - 1 ; i = path[i]) {
25          cout  <<  path[i]  <<   " -- " ;
26      }
27      cout << endl;
28 
29  }
30  int  main() {
31      produreFGraph();
32      cout  <<  cost[ 0 <<  endl;
33       return   0 ;
34  }


转载于:https://www.cnblogs.com/zhuxiongfeng/archive/2010/04/08/1707323.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值