參考:
(裡面有云風大神的a*演算法**)
(在此把這個演算法稱作b* 尋路演算法(branch star 分支尋路演算法,且與a*對應),本演算法適用於遊戲中怪物的自動尋路,其效率遠遠超過a*演算法,經過測試,效率是普通a*演算法的幾十上百倍。 )
#pragma once#include#include
#include
#define openlimit 100
#define closelimit 200
//容器中的node需要根據f_value排序從小到大
struct
node
};class
castar
~castar();
void init(int width, int height, std::string
file,
int startx, int starty, int endx, int
endy);
bool
findpath();
void getfoundpath(std::vector&vec);
//連續3個以上的路徑點在一條直線上,則去掉中間幾個點;
void optimizepath(std::vector&vec);
private
:
bool trytile(int pos, int
curpos);
int tile_num(int x, int y) const
int tile_x(int n) const
int tile_y(int n) const
int get**alueatpos(int pos) const
int gethvalueatpos(int x, int y) const
bool isreachable(int pos) const
private
:
intwidth_;
intheight_;
intstartx_;
intstarty_;
intendx_;
intendy_;
std::vector
walkmask_; //
地圖的阻擋資訊儲存成width_*height_的一維陣列
std::vectorpnodes_; //
儲存父子節點關係;
std::list
openlist_;
std::list
closelist_;
std::vector
foundpath_;
};
#include "astar.h
"int
main()
std::vector
vec;
astar.getfoundpath(vec);
cout
<<"
path point num:
"for (int i=0; ii)
astar.optimizepath(vec);
cout
<<"
after optimize, path point num:
"for (int i=0; ii)
system(
"pause");
}
迷宮尋路(A星尋路演算法)
題目 假設我們有乙個7 5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。解題思路 需要引入兩個集合和乙個公式,如下 具體步驟 把起點放入openlist 檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路...
A 尋路演算法
問題 由於遊戲中尋路出了個小問題 玩家尋路到乙個死角後在那邊不停的來回跑,就是無法越過障礙物,就研究了下a 尋路演算法以解決這個問題 研究了幾天,自己寫了個demo這裡給出總結 原理 a 演算法給出的是權值最優的路徑而不是最短路徑 權值有f g h來表示 啟發式函式如下 f p g p h p h值...
A 尋路演算法
a 演算法是靜態環境下求最短路徑的不二之選,由於是啟發式搜尋,比dijkstra 深搜廣搜要快的多啦。a 也算是我第一次接觸的移動機械人演算法,csdn上的科普文章也不少,但我作為乙個機械的小白,實現出來還是小有成就感滴。今天抽空和大家分享一下原始碼,開發環境win7 64 opengl vs201...