入口:http://codestar.alloyteam.com/1/5
潜入工具:
1 (function(window){ 2 var 3 //初始化最大值 4 max = 0, 5 //记录遍历结点的值 6 levelPath = [], 7 8 finalKeyPathStr = '', 9 10 ShortPathVal = window.ShortPathVal= function(dataArr){ 11 trvaseGraph(createGraph(dataArr),max); 12 return finalKeyPathStr; 13 } 14 15 //邻接表的形式创建无向图 16 function createGraph(arr){ 17 var 18 //头结点 19 head={}, 20 //父结点的数组,每个父节点都包括左/右子结点 21 lastLevelObjects=[]; 22 for(var i=0;i<arr.length;i++){ 23 var newArr= arr[i].split(","), 24 levelObjects=[]; 25 for(var j=0;j<newArr.length;j++){ 26 var o={}; 27 o.value = newArr[j]; 28 o.level = i+1; 29 levelObjects.push(o); 30 if(j===0 && i===0){ 31 //设置头结点 32 head=o; 33 break; 34 } 35 if(j-1>=0) 36 //设置右边的子结点 37 lastLevelObjects[j-1].rightObject=o; 38 if(j<lastLevelObjects.length) 39 //设置左边的子结点 40 lastLevelObjects[j].leftObject=o; 41 } 42 //重置lastLevelObjects为对象(当前的level属性的值)数组 43 lastLevelObjects=levelObjects; 44 } 45 return head; 46 } 47 //递归遍历图找出求得最大值的路线 48 function trvaseGraph(start,currentValue){ 49 //保证levelPath的长度小于当前结点的level属性值,避免多余的“脏”数据 50 while(levelPath.length>=parseInt(start.level)) levelPath.pop(); 51 52 levelPath.push(start.value); 53 54 if(start.leftObject==null && start.rightObject==null){ 55 //在当前遍历中遍历到最后一层子结点的value和值 56 currentValue +=parseInt(start.value); 57 if(max<currentValue){ 58 var route=""; 59 60 //重置max 61 max=currentValue; 62 for(var i=levelPath.length-2;i>=0;i--){ 63 route=levelPath[i]+'-->'+route; 64 } 65 route+=levelPath[levelPath.length-1]; 66 finalKeyPathStr="Path:"+route+" MaxValue:"+max; 67 } 68 return; 69 } 70 //在当前遍历中未遍历到最后一层子结点的value和值 71 currentValue+=parseInt(start.value); 72 if(start.leftObject!=null){ 73 //遍历左边子结点 74 trvaseGraph(start.leftObject,currentValue); 75 } 76 77 if(start.rightObject!=null){ 78 //遍历右边子结点 79 trvaseGraph(start.rightObject,currentValue); 80 } 81 } 82 83 })(window) 84 85 var dataArr =["188", 86 "188,112", 87 "105,105,194", 88 "142,166,191,129", 89 "171,172,134,127,127", 90 "131,152,160,162,165,134", 91 "102,167,102,180,125,153,126", 92 "111,122,131,188,136,125,190,109", 93 "168,160,188,126,164,175,181,128,163", 94 "114,148,121,111,162,102,151,182,134,186", 95 "126,102,166,183,161,174,159,187,113,198,159", 96 "191,143,196,186,156,103,112,124,200,140,183,124"]; 97 console.log(ShortPathVal(dataArr));
潜入地图:
成功潜入!!!
DEMO:http://jsfiddle.net/seamar/QtRTb/2/