回溯法计算二维数组最短路径

Posted muamaker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回溯法计算二维数组最短路径相关的知识,希望对你有一定的参考价值。

提供的二维数字矩阵地图,从左上角出发,每次可以向下或向右走,直到到达右下角,途中经过的路径上的数字加起来,得到的数应该是一个最大的数
1.输出路径及累计值
2.提供二维数组的输入(文本文件导入或JS文件导入)
3.输出每次搜索花的时间,比如:输入二维数组 输出结果 和 搜索用的时间
4.最大二维数组为:200x200,最小二维数组为2x2;

【题目描述】
1.例如,文本文件中内容如下:(如果采用JS编写,数组可以放到JS文件中)
二维数组:
[10, 10, 10, 10],
[1, 2, 2, 10],
[1, 2, 2, 10],
[1, 2, 3, 10],
[2, 2, 1, 10]
输出:
最大值:80
路径: 右 右 右 下 下 下 下

2.说明:
题目规则:二组数组, 从坐标(0,0)出发,只能向下或向右,终点为右下角

	var arr = [
	[10, 10, 3, 4],
	[1, 10, 10, 10],
	[1, 2, 2, 10],
	[1, 2, 3, 10],
	[2, 2, 1, 10]
	];
	var xm = arr.length;  //x 最大值
	var ym = arr[0].length; // y最大值
	
	var bestl = 0; //记录最优解
	var r = [];    //记录最优解的路径
	
	var path = []; //临时路径
	var c = 0;     //临时最优解
	trace(0,0);
	console.log(bestl)
	console.log(r)
	function trace(x,y){
		if(x < xm && y < ym){  //当还没有到达终点时,可以继续搜索
			c = c + arr[x][y];  //加上当前点,继续遍历
			path.push({x:x,y:y}); //加入当前点路径
			trace(x+1,y);
			trace(x,y+1);
			c = c - arr[x][y]; //遍历结束,回退到上级
			path.pop();			//回退到上级	
		}else if(x >= xm-1 && y >= ym-1){ //到达终点
			if(c > bestl){  //到达终点,并且比最优解还大,则记录
				bestl = c;
				r = path.slice(0);
			}
		}
	}

  

 
















以上是关于回溯法计算二维数组最短路径的主要内容,如果未能解决你的问题,请参考以下文章

1018 Public Bike Management (30分)

算法与程序设计:分支限界法

1091.二维矩阵中的最短路径

120.三角形最短路径(leetcode)

最短路径 深入浅出Dijkstra算法(一)

回溯法解旅行商问题(TSP)