A星演算法C 實現

2021-08-31 15:29:30 字數 1824 閱讀 2861

網上關於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...