zoukankan      html  css  js  c++  java
  • 回溯法计算二维数组最短路径

    提供的二维数字矩阵地图,从左上角出发,每次可以向下或向右走,直到到达右下角,途中经过的路径上的数字加起来,得到的数应该是一个最大的数
    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);
    			}
    		}
    	}
    

      

  • 相关阅读:
    temp
    JAVA&nbsp;存储空间 寄存器 堆栈 堆…
    数据类型、变量、数组类
    ubuntu ARP 防御
    详解 JAVA 创建对象 NEW
    Eclipse常见问题集锦
    解决error:2014 Commands out of sync; you can't run this command now
    关于MySql5“data too long for column”问题的探解
    Notepad++编辑Pyhton文件的自动缩进的问题(图文)
    mysql 'latin1' codec can't encode characters的问题
  • 原文地址:https://www.cnblogs.com/muamaker/p/10192060.html
Copyright © 2011-2022 走看看