zoukankan      html  css  js  c++  java
  • 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)
    

      

  • 相关阅读:
    shell 使用Seq算出1-100的奇数之和
    Shell脚本判断是否是闰年
    shell脚本之使用bc工具实现数值转换(浮点转二进制)
    shell脚本之函数的参数
    shell脚本之while
    大数据JAVA基础第十六天
    大数据JAVA基础第十五天
    大数据JAVA基础第十四天
    大数据JAVA基础第十三天
    大数据JAVA基础第十二天
  • 原文地址:https://www.cnblogs.com/muamaker/p/10169526.html
Copyright © 2011-2022 走看看