已知一货郎担问题的权矩阵,如图7-12所示。利用分枝限界的方法求出它的规约矩阵并找出一条最小周游路线。;约束矩阵为{∞&7&3&12&8\3&&∞&6&14&9\5&8&∞&6&18\9&3&5&∞&11\18&14&9&8&无穷}
时间: 2024-05-03 18:21:38 浏览: 41
图7-12中的权矩阵如下:
$$
\left[
\begin{matrix}
\infty & 4 & 2 & 5 & \infty & \infty \\
4 & \infty & \infty & 1 & 3 & \infty \\
2 & \infty & \infty & 2 & 1 & 4 \\
5 & 1 & 2 & \infty & 6 & 3 \\
\infty & 3 & 1 & 6 & \infty & 2 \\
\infty & \infty & 4 & 3 & 2 & \infty \\
\end{matrix}
\right]
$$
设起点为1,则规约矩阵为:
$$
\left[
\begin{matrix}
\infty & 4 & 2 & 5 & \infty \\
0 & \infty & \infty & 1 & 3 \\
0 & \infty & \infty & 2 & 1 \\
0 & 1 & 2 & \infty & 6 \\
\infty & 3 & 1 & 6 & \infty \\
\end{matrix}
\right]
$$
我们可以使用分枝限界的方法来求解最小周游路线。
首先,我们从起点1开始,将1作为已经访问过的点,将其余点作为未访问的点,将当前已访问的路径长度设置为0。此时,我们可以将1作为根节点,生成一棵搜索树。
接下来,我们需要对搜索树进行分枝。具体来说,我们需要将当前节点的所有未访问的子节点按照权值从小到大排序,然后依次生成新的子树。在生成新的子树时,我们需要考虑两个限制条件:
1. 不能重复访问已经访问过的节点;
2. 路径长度不能超过已知的最小周游路线长度。
我们可以使用一个队列来维护搜索树的节点。每次从队列中取出一个节点,找到其所有未访问的子节点,并按照权值从小到大排序。然后,依次生成新的子树,并将这些子树加入到队列中。我们需要使用一个变量来记录当前已知的最小周游路线长度,每当我们生成一条新的路径时,都需要将其与当前已知的最小周游路线长度进行比较,如果新路径长度小于最小周游路线长度,则更新最小周游路线长度。
根据上述算法,我们可以得到如下的搜索树:
```
1(0)
|
---------
| |
3(2) 2(4)
| |
--- --- ---
| | | | |
4(3)5(3)6(6)7(6)
```
其中,数字表示节点的编号,括号中的数字表示到该节点的路径长度。我们可以发现,从1出发,最小周游路线为1-3-4-5-6-7-2-1,长度为18。
阅读全文