1 Search
A*搜索算法
定义
A * 搜索算法(英文:A*search algorithm,A * 读作 A-star),简称 A * 算法,是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历(英文:Graph traversal)和最佳优先搜索算法(英文:Best-first search),亦是 BFS 的改进。
过程
定义起点 ,终点 ,从起点(初始状态)开始的距离函数 ,到终点(最终状态)的距离函数 ,[^note1],以及每个点的估价函数 。
A * 算法每次从优先队列中取出一个 最小的元素,然后更新相邻的状态。
如果 ,则 A * 算法能找到最优解。
上述条件下,如果 满足三角形不等式,则 A * 算法不会将重复结点加入队列。
当 时,A * 算法变为 Dijkstra;当 并且边权为 时变为 BFS。
例题
八数码
题目大意:在 的棋盘上,摆有八个棋子,每个棋子上标有 至 的某一数字。棋盘中留有一个空格,空格用 来表示。空格周围的棋子可以移到空格中,这样原来的位置就会变成空格。给出一种初始布局和目标布局(为了使题目简单,设目标状态如下),找到一种从初始布局到目标布局最少步骤的移动方法。
思路
函数可以定义为,不在应该在的位置的棋子个数。
容易发现 满足以上两个性质,此题可以使用 A * 算法求解。
示例代码
例题:
Status
Problem
Tags