js回溯法计算最佳旅行线路

假如有 A,B,C,D四个城市,他们之间的距离用 G[V][E] 表示,为 无穷大,则表示两座城市不相通
现在从计算从某一个城市出发,把所有的城市不重复旅行一次,最短路径
其中G为: (Infinity表示城市不相通)
var g = [
[Infinity,3 ,Infinity,8 ,9],
[ 3 ,Infinity,3 ,10 ,5],
[Infinity, 3 ,Infinity,4 ,3],
[8 ,10 ,4 ,Infinity,20],
[9 ,5 ,3 ,20 ,Infinity]
]
分析,如果确定从 A城市开始,则需要探索 剩下的几个城市,剩下的几个城市再往里探索,如果失败了,就废弃,回到之前的状态
var g = [
[Infinity,3 ,Infinity,8 ,9],
[ 3 ,Infinity,3 ,10 ,5],
[Infinity, 3 ,Infinity,4 ,3],
[8 ,10 ,4 ,Infinity,20],
[9 ,5 ,3 ,20 ,Infinity]
] var x = [0,1,2,3,4]; //城市的编号
var cl = 0; //规划过程中记录的距离
var bestl = Infinity; //当前最优解
var bestx = [0,0,0,0,0]; //当前最优解的路径
//var t = 0; //当前需要到达的城市
var n = x.length-1;
function Traveling(t){
if(t > n ){
//搜索到底部,如果满足最优解则记录
if(g[x[n]][0] < Infinity && (cl + g[x[n]][0] < bestl)){
for(var j = 0; j <= n; j++){
bestx[j] = x[j];
}
bestl = cl + g[x[n]][0];
}
}else{
for(var j = t ; j <= n; j++){
if(g[x[t-1]][x[j]] < Infinity && (cl + g[x[t-1]][x[j]] < bestl )){
swap(x,t,j); //交换位置,将j点作为 当前需要到达的城市
cl = cl + g[x[t-1]][x[t]]; //加上选中的点
Traveling(t+1); //搜索下一下节点
cl = cl - g[x[t-1]][x[t]]; //还原搜索之前
swap(x,t,j); //还原
}
}
}
} function swap(arr,x,y){
var temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
} Traveling(1);
console.log(bestx);
console.log(bestl)
js回溯法计算最佳旅行线路的更多相关文章
- python 回溯法 子集树模板 系列 —— 13、最佳作业调度问题
问题 给定 n 个作业,每一个作业都有两项子任务需要分别在两台机器上完成.每一个作业必须先由机器1 处理,然后由机器2处理. 试设计一个算法找出完成这n个任务的最佳调度,使其机器2完成各作业时间之和达 ...
- js实现八皇后,回溯法
八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...
- python 回溯法 子集树模板 系列 —— 9、旅行商问题(TSP)
问题 旅行商问题(Traveling Salesman Problem,TSP)是旅行商要到若干个城市旅行,各城市之间的费用是已知的,为了节省费用,旅行商决定从所在城市出发,到每个城市旅行一次后返回初 ...
- python 回溯法 子集树模板 系列 —— 17、找零问题
问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元,要求硬币的个数最少,应该如何找零?或者指出该问题无解. 分析 元素--状态空间分析大法:四种面 ...
- python 回溯法 子集树模板 系列 —— 3、0-1背包问题
问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...
- uva216 c++回溯法
因为题目要求最多8台电脑,所以可以枚举全排列,然后依次计算距离进行比较,枚举量8!=40320并不大,但这种方法不如回溯法好,当数据再大一些枚举就显得笨拙了,所以这个题我用回溯法做的,回溯有一个好处是 ...
- N-Queens And N-Queens II [LeetCode] + Generate Parentheses[LeetCode] + 回溯法
回溯法 百度百科:回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步又一次选择,这样的走不通就退回再走的技术为回溯法 ...
- 回溯法、数独与N阶可达问题
回溯法是剪了枝的穷举,这是字面上的说法,不太好理解,不如讲解实例来的酸爽,于是引出了N阶可达问题: 有N个国家,每个国家有若干城市,小明要从中国(任意一个城市)出发,遍历所有国家(假设这个遍历顺序已经 ...
随机推荐
- Xshell Plus
https://xshell.woytu.com 一个在线生成Xshell Plus 等软件的注册码的网址: https://xshell.spppx.org/
- R语言:recommenderlab包的总结与应用案例
R语言:recommenderlab包的总结与应用案例 1. 推荐系统:recommenderlab包整体思路 recommenderlab包提供了一个可以用评分数据和0-1数据来发展和测试推荐算 ...
- mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)
mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...
- @Resource注入为null
UserController中userService为null只有一个原因, 那就是你所使用的UserController对象没有被IoC容器所管理,你使用的对象是自己new出来的, 而不由sprin ...
- 让mysql 支持 emoji 表情
1.数据库配置 [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] ch ...
- python str byte 转换
# bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, ...
- Spring框架介绍及使用
Spring框架—控制反转(IOC)1 Spring框架概述1.1 什么是Spring1.2 Spring的优点1.3 Spring的体系结构2 入门案例:(IoC)2.1导入jar包2.2目标类2. ...
- react build后直接从浏览器打开
存在两个问题 一,资源文件路径 config/paths.js 这里原来的.pathname:'/', 改成.pathname:'./' function getServedPath(appPacka ...
- ux.form.field.GridDate 支持快速选择日期的日期控件
效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...
- pandas 处理文本数据
import pandas as pd import numpy as np 常规的字符串操作 s = pd.Series(['A',"B","C"," ...