js演算法之尋路

2021-09-27 08:22:34 字數 1091 閱讀 2341

演算法流程說明:

說明:起始節點記作s,目標節點記作e,對於任意節點p,從s到當前節點p的總移動消耗記作gp,節點p到目標e的曼哈頓距離記作hp,從節點p到相鄰節點n的移動消耗記作dpn,用於優先順序排序的值f(n)記作fp

選擇起始節點s和目標節點e,將(s,0)(節點,節點f(n)值)放入openlist,openlist是乙個優先佇列,節點f(n)值越小,優先順序越高。

判斷openlist是否為空,若為空,則搜尋失敗,目標節點不可達;否則,取出openlist中優先順序最高的節點p;

遍歷p的上下左右四個相鄰接點n1-n4,對每個節點n,如果n已經在closelist中,忽略;否則有兩種情況;

效果如下:

主要**

// 尋路

function findway(maparr, ostart, oend) , 300)

}// 遞迴尋路

while (bfind)

// 選取最近的路線

opens.sort(function (a, b) );

curpoint = opens.shift();

curpointarr.push(curpoint);

// 關閉其他路線

closes = closes.concat(opens);

closes.push(curpoint);

opens = ;

// 結束

if (curpoint == oend)

}if (!bfind)

}// 獲取開啟的openslist

function getround(curpoint)

}else if (curx>0 && maparr[curx - 1][cury].val == 3)

}maparr[i][j].num = h(maparr[i][j]);

opens.push(maparr[i][j]);}}

}}return opens

}

尋路演算法之A

最近接觸到moba multiplayer online battle arena 這個新名詞,發現npc尋路有點意思。於是回顧了一下經典的a 演算法。open列表 記錄可用來被尋找的點 closed列表 記錄排除在路線之外的點 對於路線中的乙個點 3.1 g值 從開始到此點的移動量 3.2 h值 ...

js版 A 尋路演算法

對於初學者而言,a 尋路已經是個比較複雜的演算法了,為了便於理解,本文降低了a 演算法的難度,規定只能橫豎 四方向 尋路,而無法直接走對角線,使得整個演算法更好理解。簡而言之,a 尋路就是計算從起點經過該點到達終點的路程,並使得總路程達到最小值,因此引入乙個公式 f g h 其中,f是從起點經過該點...

js實現A 尋路演算法

onload function cc.log this.searchroad map,0,0,4,4 傳入變數屬性,起始點座標和目標的座標。整個 執行後,列印出的是起始點到目標點最近路徑的座標 其中的map.arr是二維陣列 searchroad function map,start x,start...