- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* (2)递归计算 从进厂到第1个装配点的时间:f1[1]=e1+a1[1]f2[1]=e2+a2[1] 如果是从前一个装配点S1[j-1]直接到点S1[j],则f1[j]=f1[j-1]+a1[j] 如果是从前一个装配点S2[j-1],传送到装配点S1[j],则f1[j]=f2[j-1]+t2[j-1]+a1[j] * 递归公式 * * (3)构造最优解 为了构造最优解,必须保存最快装配路线经过第j个装配点时,是从前面哪条线上的装配点传送到j的。 令li[j]表示装配点j前面一个装配点所在的装配线1或2,并令l*表示第n个装配点所在的装配线1或2。 利用li[j]和l*的值构造最快装配路线。 * * 本讲作业 利用动态规划算法实现0-1背包问题或装配线调度问题。(二选一) 要求测试数据以文本文件的形式存储,即所有的数据由文本文件读入。 * 算法为语言描述: (1)初始化cost[i] = 最大值,cost[n-1] = 0; path[i]=-1 (2)for ( i=n-2; i=0; i--) 计 cost[i],path[i] (3)根据path计算花费最小的通路,并存放在数组 route中 令i=0; route[0]=0; 重复计算下列公式,直到route[i]=n-1 i++; route[i] = path[route[i-1]]; * * * * * * * * * * * #define VEX_NUM ? 有向连通带权图采用邻接矩阵表示 #define EDGE_NUM ? #define MAX_VALUE 32767 using namespace std; class Graph { private: int vex_num; //顶点数目 int edge_num; // 边数目 int adj[VEX_NUM][VEX_NUM]; //邻接矩阵 public: Graph() { vex_num = VEX_NUM;edge_num = EDGE_NUM; } int getVexNum(){return vex_num;} int getEdgeNum(){return edge_num;} void setVexNum(int num){vex_num = num;} void setEdgeNum(int num){edge_num=num;} int getWeight(int i,int j){return adj[i][j];} void setWeight(int i,int j,int w){adj[i][j] = w;} } 有向连通带权图采用邻接矩阵表示 * void fgraph(Graph G, int cost[], int path[]) { int n = G.getVexNum(); for (int i = 0; i n; i++) { //初始化 cost[i]= MAX_VALUE; path[i] = -1; } cost[n - 1] = 0; for (int i = n-2; i = 0; i--) { //计算cost[],path[] for (int j = i+1; j n; j++) { int p = G.getWeight(i,j); if (p != MAX_VALUE) { //如果有边 if (G.getWeight(i,j) + cost[j] cost[i]) { //判断是否更小cost[i] = G.getWeight(i,j) + cost[j];path[i] = j; } } } } } 时间复杂性O(n2) 空间复杂性O(n) * // 根据path[],计算最终结果,并存入数组route[]中 void result(int cost[],int path[],int route[],int n,int minCost) { for (int i = 1; i n; i++){ route[i] = -1; } int i = 0; route[0] = 0; while ((route[i] != n-1)(path[i] != -1)){ i++; route[i] = path[route[i-1]]; } minCost = cost[0]; } * i=8: cost[8]=c89+cost[9]=3+0path[8]=9 i=7: cost[7]=c79+cost[9]=7+0path[7]=9 i=6: cost[6]=min{c67+cost[7],c68+cost[8]}=min{6+7,5+3}=8path[6]=8 i=5: cost[5]=min
原创力文档


文档评论(0)