A 尋路演算法

2021-07-22 05:09:52 字數 2677 閱讀 6663

a*演算法是靜態環境下求最短路徑的不二之選,由於是啟發式搜尋,比dijkstra、深搜廣搜要快的多啦。

a*也算是我第一次接觸的移動機械人演算法,csdn上的科普文章也不少,但我作為乙個機械的小白,實現出來還是小有成就感滴。

今天抽空和大家分享一下原始碼,開發環境win7_64+opengl+vs2013~很遺憾沒有補好注釋,因為又要找工作又要搞課題。

// 考察temp周圍8個方向的節點

for (int k = 0; k < 8; k++)

if ((x + i) >= 0 && (x + i) < 20 && (y + j) >= 0 && (y + j) < 20 && grid[x + i][y + j].free && !existcloselist(closelist, grid[x + i][y + j]))

}else

// 不在開放列表,加入到開放列表,並設定父節點、計算ghf值}}

}}bool existopenlist(heap&h, const node &n, int &index)

}return false;

}bool existcloselist(const vector

&l, const node &n)

return false;

}int geth(const node &n, const pose &goal)

main.cpp

#include #include #include "astart.h"

using namespace std;

node grid[20][20];

pose cur,start,goal;

bool rightbutton = 1;

void init()

}void display()

; glbegin(gl_lines);

for (int i = 0; i <= 400; i += 20)

glend();

glflush();

}void mousefunc(int

button, int state, int x, int y)

else

if (!grid[cur.row][cur.col].free && cur != start&&cur != goal)

glflush();

}else

if (button == glut_right_button)

else

rightbutton = !rightbutton;

glflush();}}

else

if (button == glut_middle_button)

shortestpathbyastart(grid, start, goal);

glcolor3f(0.3f, 0.3f, 0.3f);//設定當前的繪圖顏色為綠色

for (int i = 0; i < 20; i++)

for (int j = 0; j < 20; j++)

glcolor3f(0.0f, 1.0f, 0.0f);//設定當前的繪圖顏色為綠色

node *p = grid[goal.row][goal.col].father;

if (p == null)

return;

while (p->father != null)

glflush();

}glcolor3f(0.0f, 0.0f, 0.0f);//把遍歷過的、沒有障礙的、不是起終點的,變黑

for (int i = 0; i < 20; i++)

for (int j = 0; j < 20; j++)

}}int winapi winmain(hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int nshowcmd)

迷宮尋路(A星尋路演算法)

題目 假設我們有乙個7 5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。解題思路 需要引入兩個集合和乙個公式,如下 具體步驟 把起點放入openlist 檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路...

A 尋路演算法

問題 由於遊戲中尋路出了個小問題 玩家尋路到乙個死角後在那邊不停的來回跑,就是無法越過障礙物,就研究了下a 尋路演算法以解決這個問題 研究了幾天,自己寫了個demo這裡給出總結 原理 a 演算法給出的是權值最優的路徑而不是最短路徑 權值有f g h來表示 啟發式函式如下 f p g p h p h值...

A 尋路演算法

很多遊戲特別是rts,rpg類遊戲,都需要用到尋路。尋路演算法有深度優先搜尋 dfs 廣度優先搜尋 bfs a星演算法等,而a星演算法是一種具備啟發性策略的演算法,效率是幾種演算法中最高的,因此也成為遊戲中最常用的尋路演算法。直入正題 在遊戲設計中,地圖可以劃分為若干大小相同的方塊區域 方格 這些方...