Openharmony 軍棋工兵尋徑算法的實現(xiàn)
一、引言
工兵可在鐵路線上任意行走,其它棋子在鐵路線上只能直走或 經過弧形線,不能轉直角彎; 工兵在普通路線上跟其他棋子一樣,走一格。但是在軌道上,就 如入無人之地了??梢栽谲壍郎献杂梢苿?怎樣走都行,只要不超過 軌道的區(qū)域,想走多遠就走多遠,但是如果有個棋子(不論敵我)堵住路 線,你就不能按照那個路線行進;同時我們還要尋找到最近的路徑。
二、算法分析
大體要求
1、工兵從起點到終點過程中不能有障礙物阻擋。
2、如何尋求到路徑最短?且是否用時最快。
3、也有可能起點到終點是死路。
軍旗的工兵走法特別像迷宮走法。
迷宮算法
1、深度優(yōu)先搜索(DFS)
它和遞歸的探測思路是基本一致的,可以看成是遞歸方式的非遞歸版本。
2、廣度優(yōu)先搜索(BFS)
廣度優(yōu)先搜索法利用隊列的特點,一層層向外擴展查找可走的方塊,直到找到出口為止,最先找到的這個答案就必然是最短的。
3、根據(jù)特點我們希望最先找到最短的距離故采用bfs的方式。
采用隊列來記錄探測點;當前探測點的四個方向,可以通過的點,保存到這個隊列中,并移除當前探測點。
右 下 左 上 的 四個方向探測。
采用一個二維數(shù)組來存儲 x,y上的障礙物,和探測的點。
代碼實現(xiàn)
(1)獲取到起點和終點坐標。
(2)獲取二維數(shù)組迷宮標記。
二維數(shù)組是記錄棋盤上 0 是表示可通狀態(tài),1表示不可通。默認是棋盤鐵路都為0可通。
然后,敵方和友方其中全部設置為不可通1。
(3)進行廣度優(yōu)先搜索。
(4)本案例還記錄路徑,采用的是鏈表數(shù)據(jù)結構。
每次 把prev給記錄下來。這下就可以追溯到整個完整的探測路線。
(5)隊列是自己利用數(shù)組改成的。
openharmony 目前 Deque、Queue 有bug,沒法用;只能用數(shù)組,然后 數(shù)組的pop是最后一個,就把探測順序插入第一個。
三,總結
可能代碼直接拷貝過去跑不通。
本文也就闡述一種思維,同時體現(xiàn)一下openharmony目的能力可達之處。