2011.8.03练习参考.docVIP

  • 0
  • 0
  • 约8.96千字
  • 约 12页
  • 2017-08-29 发布于浙江
  • 举报
2011.8.03练习参考

1、 直接按照题意画出图像如下: 几种方法比较: 100个元素,枚举是行不通的。 贪心策略可能会丢掉最优解,也是不行的。 分治法有大量的重复计算,不好。 自然想到动态规划。 算法分析 动态规划的两个基本步骤:构造状态网络和寻找递推关系。由题意直接得到的图中路径和点本身都有值,网络构造复杂。由于起始点不确定,很难将图上的点进行拓扑排序,更难寻找初值和递推关系。 解决方法 联想到单源最短路径问题需要有起始点。 加入一点S作为起始点,得到新图如下: 化成了动态规划中最简单的最短路径问题 拓扑顺序:S 4 3 2 1 递推关系: 令状态量Dis[k]表示顶点S到顶点k的最短距离,则有状态转移方程: 算法实现 数据结构 需要一个Dis数组存放每一点到S的最短路径。 运算过程: 从1开始拓扑排序 从S开始逐次计算 参考: #includeiostream using namespace std; int M,N; int value[101][3];//value[i][0]:得到i需要多少钱 int g[101][101]; //value[i][1]:i的等级 //value[i][2];刚输入时代表可替换的种类,后来表示是否可交换 int Dijkstra() { int dist[101]; int i,j; for(i=1;i=N;

文档评论(0)

1亿VIP精品文档

相关文档