演算法流程說明:
說明:起始節點記作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...