算法之最快到达终点问题
题目:
给定一个正整数数组,每个元素大小表示从该元素出发最多可移动几个节点。假设总是从第一个元素开始移动。问如何移动可以以最少的步数移动到最后。
实现
我们用start表示当前元素,array表示数组,walk表示到目前为止的移动步数。
function move(start,array,walk){ var count=array[start]; var min={},thiswalk; min.num=-1;//存放当前行动步数 min.str=" ";//存放当前路径 if(start+count>=(array.length-1)){ min.num=++walk; min.str+=""+array[start]+" "+array[array.length-1]; return min; }
walk++;
for(var i=1;i<=count;i++){ thiswalk=move(start+i,array,walk);//继续向下走 min=(min.num<0||min.num>thiswalk.num)?thiswalk:min; } min.str=" "+array[start]+min.str; return min; }
array=new Array(3,4,2,1,3,1);时 得到min={num:2;str:" 3 4 1"};