1.题目
用分支定界算法求以下问题:
某公司于乙城市的销售点急需一批成品,该公司成品生产基地在甲城市。
甲城市与乙城市之间共有 n 座城市,互相以公路连通。甲城市、乙城市以及其它各城市之间的公路连通情况及每段公路的长度由矩阵M1 给出。
每段公路均由地方政府收取不同额度的养路费等费用,具体数额由矩阵M2 给出。
请给出在需付养路费总额不超过 1500 的情况下,该公司货车运送其产品从甲城市到乙城市的最短运送路线。
具体数据参见文件:
M1.txt: 各城市之间的公路连通情况及每段公路的长度矩阵(有向图); 甲城市为城市Num.1,乙城市为城市Num.50。
M2.txt: 每段公路收取的费用矩阵(非对称)。
2.算法分析
2.1算法思路和流程
(1)将m1.txt和m2.txt的数据读入两个50×50的数组。
(2)用Floyd算法求出所有点对之间的最短路径长度和最小费用。
(3)应用深度优先搜索对该多叉树进行搜索,由于树的叉树太多,则必须采用剪枝策略,否则搜索速度会很慢,则将Floyd计算出的A点到B点的最短距离和要求的花费1500作为界,如果满足剪枝条件,则减掉,否则则记录路径和进行深度优先搜索。
(4)直到搜到B点,更新最好路径为当前路径。
2.2剪枝策略
当当前节点p已经被访问过,或者当前路径大于已知最优路径距离,或者花费大于1500时,进行剪枝。
(visit[p] ||length>bestlength || mycost>1500)