其他相關實驗
使用蠻力法、grahamscan和分治法求解凸包問題——哈工大演算法實驗一
使用貪心近似、線性規劃捨入法和精確法求解集合覆蓋問題——哈工大演算法實驗三
隨機快排和三路快排的實現——哈工大演算法實驗四
尋路問題,輸入乙個方格表示的地圖,要求用a*演算法找到並輸出從起點(再放各種標示字母s)到終點(在方格中標示字母t)的代價最小的路徑,有如下條件及要求:
1.每一步都落在方格中,而不是橫豎線的交叉點
2.灰色格仔表示障礙,無法通行
3.在每個格仔處,若無障礙,下一步可以達到八個相鄰的格仔,並且可以到達無障礙的相鄰格仔。其中,向上、下、左、右四個方向移動的代價為1,向四個斜角方向移動的代價為√2
4.在一些特殊格仔上行走要花費額外的地形代價,比如黃色格仔代表沙漠,經過它的代價為4;藍色格仔代表溪流,經過它的代價為2;白色格仔為普通地形,經過它的代價為0
5.經過一條路徑的總代價為移動代價+地形代價。其中移動代價是路徑上所做的所有移動的代價的總和;地形代價為路徑上除起點外所有格仔的地形代價的總和。
演算法a* single(d, s, t)
輸入 :平面上n個點的二維陣列d,起始點s,終點t
輸出 :從s到t的路徑
1: openlist.push(s)
2: while(true)
3: 尋找openlist中f值最低的格,稱為當前格p
4: closelist.push§
5: if 它不可通過||已經在closelist中 then ;
6: if 它不在openlsit中
7: then openlist.push§,把p作為該格的父節點,計算fgh值
8: if 它已在openlist中
9: then if 它的f值更低
10: then 把p作為該格的父節點,重新計算fgh值
11: if 目標格已經在openlist中
12: then break
13: 從t開始,沿著每一格的父節點回溯,直到回到s,輸出路徑
演算法a* bidirection(d, s, t)
輸入 :平面上n個點的二維陣列d,起始點s,終點t
輸出 :從s到t的路徑
1: openlist1.push(s)
2: openlist2.push(t)
3: while(true)
4: 尋找openlist1中f值最低的格,稱為當前格p1
5: 尋找openlist2中f值最低的格,稱為當前格p2
6: if p1不可通過||已經在closelist1中 then ;
7: if 它已在openlist1中
8: then if 它的f值更低
9: then 把p1作為該格的父節點,重新計算fgh值
10: if p2不可通過||已經在closelist2中 then ;
11: if 它已在openlist2中
12: then if 它的f值更低
13: then 把p2作為該格的父節點,重新計算fgh值
14: if openlist1和openlist2中存在相同點
15: then break
16: 從s和t分別開始,沿著每一格的父節點回溯,直到回到相遇點,輸出路徑
求解迷宮問題(不是最佳路徑)
include define maxsize 50 define m 10 define n 10 int m m n struct st maxsize 另乙個堆疊的方式 結構陣列 int top 1 棧指標 void mgpath int x1,int y1,int x2,int y2 定義乙個...
C 迷宮問題的求解演算法
一 實驗目的 1 熟練掌握鏈棧的基本操作及應用。2 利用鍊錶作為棧的儲存結構,設計實現乙個求解迷宮的非遞迴程式。二 實驗內容 問題描述 以乙個mn的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設計乙個程式,對信任意設定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結論。基本要求 首先實現...
迷宮求解問題 堆疊的使用
queue.h define stack init size100 define stackincrement10 define statusbool define error0 define overflow 2 define ok1 struct postype typedef struct s...