分支限界法作业1.旅行商问题设有n个城市,城市之间道路的长度均大于或等于0,还可能是∞(对应城市之间无交通线路)。一个旅行商从某个城市出发,要经过每个城市一次且仅一次,最后回到出发的城市,问他如何走才能使他走的路线最短?要求:使用矩阵归约确定限界函数的方法,或者其他方法实现。分析:旅行商问题对应的解的元组为n元组,其中假设第一个城市为1,则n元组中未确定的为剩下n-1个城市,元组为(1,x2,…,xn),每个xi的取值为{2,…,n};约束条件为已经经过的城市不能再走,最后回到出发城市。目标函数是巡回旅行路线长度。利用矩阵归约的方法确定限界函数:限界函数:对任意路线上的结点d,设p是其前驱结点,则f(d)=g(d)+h(d),其中,g(d)=f(p)+C’p[p][d],h(d)=rd。C’p[p][d]是在p点规约后得到的矩阵中p点到d点的长度值,rd为d点可以归约掉的值。算法1:(叶子结点进堆)Input:图G;Output:从源点1出发再回到1顶点的最短巡回旅行路线。1.设定目标函数的限界down=r1,up=∞2.计算初始结点1的f(1)=r1,将初始结点插入最小堆H;3.while(H≠Φ)4.{5.从H中做DELETEMIN的操作,用p带回相应结点;6.Ifp是叶子结点then7.输出当前最优值,并从叶子结点沿parent指针输出解,退出;8.Else9.{产生p的所有满足约束条件的后继结点d(建树,建立指向parent的指针)并计算f(d);10.iff(d)