算法设计与分析

您所在的位置:网站首页 什么叫回溯法 算法设计与分析

算法设计与分析

2023-09-20 09:29| 来源: 网络整理| 查看: 265

旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 一、贪心算法 贪心法求解TSP问题有两种贪心策略。

1)最近邻点策略:从任意城市出发,每次在没有到过的城市中选择最近的一个,直到经过了所有的城市,最后回到出发城市。

给定初始的城市a,寻找与其邻接的最短距离的城市b,记录二者之间的路径并增加总路径长度;下一次从城市b开始,寻找与b邻接的最短距离的城市,循环查找,直到找到n-1条路径(n为城市个数),最后加上终点回到起点的边即可。

2)最短链接策略:每次在整个图的范围内选择最短边加入到解集合中,但是,要保证加入解集合中的边最终形成一个哈密顿回路。

首先按照城市之间距离远近进行排列,从距离最近的两个城市开始,如果这两个城市不在一个联通分量中并且度数均小于等于2,那么记录二者之间的路径,将它们划分到一个联通分量并将度数增加1;然后从距离第二小的两个城市开始,重复上述操作直到记录的路径有n-1条,最后找到度数为1的两个城市,作为最后一条路径。

3)“便宜算法”:寻找近似算法求解,需采 用近似算法往往需要增加一些限制,以便能够提高计算速度和近似程度:对图中任意的三点构成的三角形,其中任何两边之和大于第三边。

给v1一个自环,得到第一个回路。以后反复执行以下过程:寻找与已得回路距离最近的点,将之插入到回路中;回路以外无结点时终止。 插入办法:设待插入点为j,有两种选择:(1)加入(j,t1)和(j,t)、删除(t,t1); (2) 加入(j,t2) 和(j,t)、 删除(t,t2). 选使回路长度增加量小的那种办法作插入。

(下面采取最近邻点策略) 代码:

#include #include #include using namespace std; void TSP(int **A,int N,int x) {//从x出发 int *flag=(int *)malloc(N*sizeof(int));//标记是否城市走过,初始值设为0,走过设为1 int sum=0; int i,j,k,u,v,min; u=x; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3