網上關於a星演算法的介紹很多,就不重複了。
其實和迪傑斯特拉演算法幾乎一模一樣,f=g+h, h是當前位置到終點的長度估計值,如果令h=0,就成了迪傑斯特拉演算法。
下面是我的**:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace astar
public vertex()
}class astartestclass
public int getg(vertex v)//當前點與父節點為上下左右的關係,距離為1(不考慮上左,上右,下左,下右)
//從openlist中查詢f值最小的頂點
public vertex getvexofminffromopenlist(listopenlist)
}return vexofminf;
}public bool isinlist(int x, int y, listlist)
}return false;
}public vertex getvertexfromlist(int x, int y, listlist)
}return new vertex(0, 0);//上面一定有返回值
}public listastar(vertex startvertex, vertex endvertex, int[,] mapdata)
int vexindex = 0;
int[,] direction = new int[4, 2] , , , };
//初始化closelist
//初始化openlist,將起點新增進去
openlist.add(startvertex);
while (openlist.count() > 0)
//將f值最小的節點移入close表中,並將其作為當前要處理的節點
openlist.remove(minvertex);
closelist.add(minvertex);
//對當前要處理節點的可到達節點進行檢查,
Java版A星演算法
a星演算法步驟 1.起點先新增到開啟列表中 2.開啟列表中有節點的話,取出第乙個節點,即最小f值的節點 判斷此節點是否是目標點,是則找到了,跳出 根據此節點取得八個方向的節點,求出g,h,f值 判斷每個節點在地圖中是否能通過,不能通過則加入關閉列表中,跳出 判斷每個節點是否在關閉列表中,在則跳出 判...
A星演算法理解
a星演算法是一種探測性演算法,實現需要關注的重點 二維地圖陣列,關閉列表,開放列表 小根堆 每個點的父節點。二維地圖陣列用來儲存地圖上是否可通過的標記資訊,假設現在要從地圖的起始點a移動到目的點b,如何尋找到最短的路徑呢?1.把地圖上的a點放入關閉列表中,然後將a點周圍的可走點放入乙個以小堆為結構的...
A 演算法 c 實現
最近舍友突然說起a 演算法 雖然之前看過 但是我發現自己記得不是很清楚了 而且從來沒去手動實現過 趁著這次就實現一下加深理解 去網上查了下原理 看了幾篇別人的實現 然後按自己理解綜合一下寫出來記錄一下 我參考那篇程式執行有好幾個問題,而且執行得出路徑也是不對的,不知道他有沒跑過的。astar.h i...