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星演算法是一種具備啟發性策略的演算法,效率是幾種演算法中最高的,因此也成為遊戲中最常用的尋路演算法。直入正題 在遊戲設計中,地圖可以劃分為若干大小相同的方塊區域 方格 這些方...