本文主要是介绍leetcode(为高尔夫比赛砍树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
求两点之间最短路径,个人平常用的最多的是floyd算法,算法相当简洁,写起来也方便,但是这里的格点比较多,不适合floyd,而对于dijkstra算法,当树接节点占满图后,直接退化成floyd算法,时间复杂度也变得不是很理想,这里用A* (求路径有各种各样的算法,有A*的变种,也有些对于实时度较高的甚至采用蚁群算法,这是个很复杂的领域,无人驾驶,导航,路由,加速器,都用到路径规划,但针对某一特定问题选择的算法都会不同。):
var cutOffTree = function(forest) {var ans = 0;//floydvar trees = [];for(let i = 0; i < forest.length; i++) {for(let j = 0; j < forest[i].length; j++) {if(forest[i][j] > 1) {trees.push([forest[i][j],[i,j]]);}}}trees.sort((a, b)=>{return a[0] - b[0];});trees.unshift([1,[0,0]]);//A*,floyd(时间复杂度是最高的),dijkstra(居中),bfs(时间复杂度过高)//2500个树节点会退化到O(n^3)//采用A*const A_STAR = (sourceX, sourceY, targetX, targetY) => {let CLOSED = [];let OPEN = [];let MAP_CLOSED = [];let MAP_OPEN = [];const calc_h = (curX,curY, targetX, targetY) => {return Math.abs
这篇关于leetcode(为高尔夫比赛砍树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!