淺析a-算法求解最短路徑

淺析a-算法求解最短路徑

ID:21145055

大?。?4.00 KB

頁數(shù):7頁

時間:2018-10-19

淺析a-算法求解最短路徑_第1頁
淺析a-算法求解最短路徑_第2頁
淺析a-算法求解最短路徑_第3頁
淺析a-算法求解最短路徑_第4頁
淺析a-算法求解最短路徑_第5頁
資源描述:

《淺析a-算法求解最短路徑》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、淺析A*算法求解最短路徑近來不少的朋友問我有關(guān)A*算法的新題目,目的是寫一個搜索最短路徑的程序.這個在鼠標(biāo)控制精靈運動的游戲中(不算智冠出的那些用鼠標(biāo)充當(dāng)鍵盤方向鍵的弱智RPG)大量使用,尤其是即時戰(zhàn)略類的.但是我個人以為A*算法只適合處理靜態(tài)路徑求解,對即時戰(zhàn)略游戲中大量對象堵塞過道時,疏通交通很難實現(xiàn)(也不是不能實現(xiàn),這需要一個相當(dāng)好的估價函數(shù),且不能一次搜索路徑)  我希奇的是,A*算法應(yīng)該是算法課的基礎(chǔ)知識了,任何一個系統(tǒng)學(xué)習(xí)過算法的人都應(yīng)該了解,本不應(yīng)該我在這里亂寫一通,大家隨意翻本將計算機算法是純正的A*算法;-)*你可以在理解了這段程序的基礎(chǔ)上,按

2、自己的理解寫出類似的代碼.但是簡單的*復(fù)制它到你的程序中是不答應(yīng)的,假如你真要這樣干,請在直接使用它的軟件的*文檔中,寫上我的名字;-)*有任何的新題目,或建議請E-mail到[email protected]*歡迎參觀我的主頁~cloudap.dat,保存有輿圖的數(shù)據(jù)*///#defineNDEBUG#include#include#include#include#defineMAPMAXSIZE100//輿圖面積最大為100x100#defineMAXINT8192//定義一個最大整數(shù),輿圖上任意兩點間隔不會超過它#defineSTACKSIZE6

3、5536//保存搜索節(jié)點的堆棧大小#defiile_num(x,y)((y)*map_ap_ap_ap[MAPMAXSIZE][MAPMAXSIZE];//輿圖數(shù)據(jù)intdis_map[MAPMAXSIZE][MAPMAXSIZE];//保存搜索路徑時,中間目標(biāo)地最優(yōu)解intmap_ap_h;//輿圖寬和高intstart_x,start_y,end_x,end_y;//地點,終點坐標(biāo)//初始化隊列voidinit_queue(){queue=(LINK)malloc(sizeof(*queue));queue->node=NULL;queue->f=-1;qu

4、eue->next=(LINK)malloc(sizeof(*queue));queue->next->f=MAXINT;queue->next->node=NULL;queue->next->next=NULL;}//待處理節(jié)點進隊列,依靠對目的地估價間隔插進排序voidenter_queue(TREEnode,intf){LINKp=queue,father,q;alloc(sizeof(*q));assert(queue);q->f=f,q->node=node,q->next=p;father->next=q;}//將離目的地估計最近的方案出隊列TREE

5、get_from_queue(){TREEbestchoice=queue->next->node;LINKnext=queue->next->next;free(queue->next);queue->next=next;stack[stacktop]=bestchoice;assert(stacktop//開釋棧頂節(jié)點voidpop_stack(){free(stack[--stacktop]);}//開釋申請過的所有節(jié)點voidfreetree(){inti;LINKp;for(i=0;itile)&&y==tile_y(p->tile))return1;

6、//假如(x,y)曾經(jīng)經(jīng)過,失敗p=p->father;}h=father->h1;if(h>=dis_map[y][x])return1;//假如曾經(jīng)有更好的方案移動到(x,y)失敗dis_map[y][x]=h;//記錄這次到(x,y)的間隔為歷史最佳間隔//將這步方案記進待處理隊列p=(TREE)malloc(sizeof(*p));p->father=father;p->h=father->h1;p->tile=tile_num(x,y);enter_queue(p,p->hjudge(x,y));return0;}//路徑尋找主函數(shù)voidfindpa

7、th(int*path){TREEroot;inti,j;stacktop=0;for(i=0;itile=tile_num(start_x,start_y);root->h=0;root->father=NULL;enter_queue(root,judge(start_x,start_y));for(;;){intx,y,child;TREEp;root=get_from_queue();if(root==NULL){*path=-1;return;}x=tile_x(root->tile);y=tile_y(root->tile);if(x==end_x&

8、&y==end_y)br

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。