一、项目概述
旅行路径规划问题,是为了实现在多个目标景点中进行旅行,并且保证每个目标点只访问一次,且总路径最短的问题。跟旅行商问题大体差不多,只不过旅行路径规划问题是起点和终点都是同一点而已,而旅行路径规划问题,起点和终点可以相同,也可以不同。此算法首先是基于最小生成树的旅行商算法的求解,再结合贪心算法和匹配算法的**,把局部最优转化为全局最优,避免了最临近算法中最后几步产生的较大的误差。
二、算法步骤
1. 利用Kruskal算法**生成最小生成树
2. 利用贪心算法依次删除节点度大于2的边,这样得到的是孤立点、一度点、和二度点
3. 如果孤立点的个数为1,则利用贪心**连接与其边最小的一度点的边,这样的话,只剩下一度点和二度点
可以证明,此时的一度点的个数必为偶数。此时再利用最小完美匹配算法匹配一度点,便可以得到旅行商算法的解
4. 如果孤立点的个数大于1,跳到步骤1,将生成的最小生成树和之前的节点对象合并
5. 如果起点和终点一样,则为旅行商算法,得解
6. 如果起点和终点不一样,在删除与起点和终点相联系的边,可以得到以下三种情况:
1). 如果起点和终点直接相连,去掉后,只有两个孤立点,则利用贪心算法**将两个孤立节点分别与两个一度节点连接起来
2). 如果去掉后,有三个孤立点,则应该将除起点终点外的那个孤立点与最小边的一度节点连接起来,然后再同第一种情况操作
3). 如果去掉后,只有两个孤立节点,有四个一度节点,则应该先将两组两个一度节点最小的边连接起来,然后再同第一种情况
7. 算法计算得到以节点对象为中心的结果,然后通过寻找,将路径结果依次插入到数组中,即得到路径规划结果
三、算法程序流程图
地址:http://images.cnitblog.com/i/462443/201405/071035132766336.png
或http://www.processon.com/view/link/536995170cf21db1c3ecb7ed
四、功能介绍
搜索提示:在左边面板中输入景点的前面几个字母,会有搜索提示建议,建议采用提示中的目的地,否则有可能目的地不存在
景点添加:在搜索提示中,鼠标点击该项,或者按Enter键,均可进行添加景点,或者直接点击添加按钮,可以进行添加景点
景点删除:添加的景点在下面的面板中会显示出来,点击该项右侧的删除"X",即可删除该景点
起点终点设置:鼠标悬停在该项时,可以设置起点、设置终点
搜索:点击搜索的时候,开始进行路径规划算法的计算,此时会在页面有个覆盖层提示用户进展,搜索完成后,添加后,覆盖层消失
路径结果添加:此时为驾车搜索的路径规划结果集,将目的地结果集显示在搜索结果面板中,同时将驾车详情显示在搜索结果面板中
策略选择:默认为最小路径,也可以选择最短时间、避开高速策略 地图标注:将搜索结果顺序用折线在百度地图上联系起来,并呈现
地图右键:
1). 放大:使区域显示更精准
2). 缩小: 在更大的区域进行查看
3). 放大到最大级:放大到最大的区域查看
4). 查看全国: 查看全**地图
5). 在此添加标注:在鼠标点击的位置添加标注
6). 在此附近找:在附近搜索酒店、餐厅、银行等等
7). 清除标记:将地图的标记全部清除
Gihub:使用Github进行代码管理平台,里面有全部代码
关于: 对本项目的初略说明
$('#t_suggest_results').find('li').eq(0).find('div').eq(0).find('span').eq(0).text()