A 尋路演算法

2021-09-07 23:20:26 字數 1712 閱讀 1206

參考:

(裡面有云風大神的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...