Openharmony 軍棋工兵尋徑算法的實(shí)現(xiàn)
??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??
一、引言
工兵可在鐵路線上任意行走,其它棋子在鐵路線上只能直走或 經(jīng)過弧形線,不能轉(zhuǎn)直角彎; 工兵在普通路線上跟其他棋子一樣,走一格。但是在軌道上,就 如入無人之地了。可以在軌道上自由移動(dòng),怎樣走都行,只要不超過 軌道的區(qū)域,想走多遠(yuǎn)就走多遠(yuǎn),但是如果有個(gè)棋子(不論敵我)堵住路 線,你就不能按照那個(gè)路線行進(jìn);同時(shí)我們還要尋找到最近的路徑。

二、算法分析
大體要求
1、工兵從起點(diǎn)到終點(diǎn)過程中不能有障礙物阻擋。
2、如何尋求到路徑最短?且是否用時(shí)最快。
3、也有可能起點(diǎn)到終點(diǎn)是死路。
軍旗的工兵走法特別像迷宮走法。
迷宮算法
1、深度優(yōu)先搜索(DFS)
它和遞歸的探測(cè)思路是基本一致的,可以看成是遞歸方式的非遞歸版本。
2、廣度優(yōu)先搜索(BFS)
廣度優(yōu)先搜索法利用隊(duì)列的特點(diǎn),一層層向外擴(kuò)展查找可走的方塊,直到找到出口為止,最先找到的這個(gè)答案就必然是最短的。
3、根據(jù)特點(diǎn)我們希望最先找到最短的距離故采用bfs的方式。
采用隊(duì)列來記錄探測(cè)點(diǎn);當(dāng)前探測(cè)點(diǎn)的四個(gè)方向,可以通過的點(diǎn),保存到這個(gè)隊(duì)列中,并移除當(dāng)前探測(cè)點(diǎn)。

右 下 左 上 的 四個(gè)方向探測(cè)。

采用一個(gè)二維數(shù)組來存儲(chǔ) x,y上的障礙物,和探測(cè)的點(diǎn)。
代碼實(shí)現(xiàn)
(1)獲取到起點(diǎn)和終點(diǎn)坐標(biāo)。
(2)獲取二維數(shù)組迷宮標(biāo)記。
二維數(shù)組是記錄棋盤上 0 是表示可通狀態(tài),1表示不可通。默認(rèn)是棋盤鐵路都為0可通。
然后,敵方和友方其中全部設(shè)置為不可通1。
(3)進(jìn)行廣度優(yōu)先搜索。
(4)本案例還記錄路徑,采用的是鏈表數(shù)據(jù)結(jié)構(gòu)。
每次 把prev給記錄下來。這下就可以追溯到整個(gè)完整的探測(cè)路線。
(5)隊(duì)列是自己利用數(shù)組改成的。
openharmony 目前 Deque、Queue 有bug,沒法用;只能用數(shù)組,然后 數(shù)組的pop是最后一個(gè),就把探測(cè)順序插入第一個(gè)。
三,總結(jié)
可能代碼直接拷貝過去跑不通。
本文也就闡述一種思維,同時(shí)體現(xiàn)一下openharmony目的能力可達(dá)之處。















 
 
 

















 
 
 
 