使用Python在实现A*算法的步骤
作者:暮色微凉
时间:2024-11-11
浏览:1
以此加权图为例,用Python实现A*算法。加权图中的节点用粉红色圆圈表示,并且给出了沿节点的路径的权重。节点上方的数字代表节点的启发式值。首先为算法创建类。一个用于存储与起始节点的距离,另一个用于存储父节点。并将它们初始化为0,以及起始节点。defaStarAlgo(start_node,stop_node):open_set=set(start_node)closed_set=set()g={}parents={}g[start_node]=0parents[start_node]=start_nod
本文目录
以此加权图为例,用Python实现A*算法。加权图中的节点用粉红色圆圈表示,并且给出了沿节点的路径的权重。节点上方的数字代表节点的启发式值。

首先为算法创建类。一个用于存储与起始节点的距离,另一个用于存储父节点。并将它们初始化为0,以及起始节点。
def aStarAlgo(start_node,stop_node):
open_set=set(start_node)
closed_set=set()
g={}
parents={}
g[start_node]=0
parents[start_node]=start_node找到具有最低f(n)值的相邻节点,针对到达目标节点的条件进行编码。如果不是这种情况,则将当前节点放入打开列表中,并设置其父节点。
While len(open_set)>0: n=None for v in open_set: if n==None or g[v]+heuristic(v)如果相邻的g值低于当前节点并且在封闭列表中,则将其替换为这个新节点作为父节点。
else: if g[m]>g[n]+weight: g[m]=g[n]+weight parents[m]=n if m in closed_set: closed_set.remove(m) open_set.add(m)如果当前g低于前一个g,并且其相邻在open list中,则将其替换为较低的g值,并将相邻的parent更改为当前节点。
如果不在两个列表中,则将其添加到打开列表并设置其g值。
if n==None: print('Path does not exist!') return None if n==stop_node: path=[] while parents[n]!=n: path.append(n) n=parents[n] path.append(start_node) path.reverse() print('Path found:{}'.format(path)) return path open_set.remove(n) closed_set.add(n) print('Path does not exist!') return None现在,定义一个函数来返回相邻节点及其距离。
def get_neighbors(v): if v in Graph_nodes: return Graph_nodes[v] else: return None此外,创建一个函数来检查启发式值。
def heuristic(n): H_dist={ 'A':11, 'B':6, 'C':99, 'D':1, 'E':7, 'G':0, } return H_dist[n]描述一下图表并调用A*函数。
Graph_nodes={ 'A':[('B',2),('E',3)], 'B':[('C',1),('G',9)], 'C':Node, 'E':[('D',6)], 'D':[('G',1)], } aStarAlgo('A','G')算法遍历图,找到代价最小的路径。
这是通过E => D => G。
作者最新文章
长网页转PDF怎么避免断图?网页转PDF怎么设置分页
2026-11-01 09:31
夸克资源库蓝光资源每日更新经典电视剧全集
2026-10-30 11:54
会声会影怎么导入音频 支持格式及步骤
2026-10-29 12:23
WPS表格常用功能实操:从录入到排序筛选的完整流程
2026-10-29 09:57
B站免费入口永久有效网址推荐
2026-10-28 16:37
上一篇:
PHP编程的高级技巧有哪些?
下一篇:
win10搜索栏的大小调整指南
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多

































