首页 > 编程语言 >A星算法笔记

A星算法笔记

时间:2024-03-07 21:33:54浏览次数:34  
标签:node list 笔记 current 算法 方格 neibor open

A星算法笔记

参考:https://blog.csdn.net/hitwhylz/article/details/23089415

原理

heuristic 启发式
F=G+H
G: distance between start and current node
H: distance between goal and current node

//TO SEARCH & CHECK
Manhatan 距离:

基本数据结构

1.全局数组:
open list
close list
start
goal

2.局部变量
current node
neibor node

3.结构体

struct node{
  int F;
  int G;
  int H;
  node* parent
};

伪码

初始化start, goal
把start加入open list


FOR open list 
	选择 F 值最小的 ( 方格 ) 节点 current
	把它从 open list 里取出,放到 close list 中。

	for 检查所有与 current 相邻的方格 neibor
		IF 方格neibor不在open lsit 中,则把它加入到 open list 中。
		   把current设置为neibor的父亲。
		   计算neibor 的 F G H 
		   
		ELSE IF neibor已经在 open list 中
		   则比较 neibor.G 和 G1 = current.G + Manhatan(current,neibor)
		   IF G1 > G 这条路径是否更优,也就是说经由当前方格 ( 我们选中的方格 ) 到达那个方格是否具有更小的 G 值。
			   则neibor.parent=current
			   重新计算neibor的 F 值和 G 值。
		
		   ELSE
				不做任何操作。

		ELSE IF 是 close list 中或是不可走 (unwalkable) 的方格
		   忽略

//TODO
回溯及打印

TODO

完整源码,效果GIF

标签:node,list,笔记,current,算法,方格,neibor,open
From: https://www.cnblogs.com/studentWangqy/p/18059817

相关文章

  • java基础 韩顺平老师的 面向对象(基础) 自己记的部分笔记
    194,对象内存布局基本数据类型放在堆里面,字符串类型放在方法区。栈:一般存放基本数据类型(局部变量)堆:存放对象(Catcat,数组等)方法区:常量池(常量,比如字符串),类加载信息 196,属性注意细节1,属性可以是基本数据类型,也可以是引用类型(对象,数组)2,属性的定义语法同变量,示例:访问修饰符属......
  • 2024牛客寒假算法基础集训营3
    A-智乃与瞩目狸猫、幸运水母、月宫龙虾#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingi128=__int128;usingldb=longdouble;#defineinti64usingvi=vector<int>;usingpii=pair<int,int>;usingv......
  • Denoising Implicit Feedback for Recommendation论文阅读笔记
    Abstract​ 隐式反馈的普遍性使它们成为构建在线推荐系统的默认选择。虽然大量的隐式反馈缓解了数据的稀疏性问题,但缺点是它们在反映用户的实际满意度方面没有那么干净。例如,在电子商务中,很大一部分点击并不能转化为购买,许多购买最终会得到负面评论。因此,解释隐式反馈中不可避免......
  • 类以撒的结合的房间生成算法
    类以撒的结合的房间生成算法原链接翻译版本目前本人只实现了房间大小都一样的情况,没有什么2x2,L型,2x1之类的房间放个效果图算法需要注意的房间选择对于当前位置是否有设置房间(是否被占位)当前房间位置是否越界(超出限定范围)当前位置的周围4方向的房间量是否大于1个(为什......
  • 旧时 科大部分物理笔记
    (怎么不见了这么多,后期纸制笔记未录入)有心力的角速度上的惯性离心势能势能(\(l\)为角动量):\(E_p=-\dfrac{1}{2}mw^2r^2=\dfrac{l^2}{2mr^2}\)(由\(l=mrv_\theta\)和动能分量\(\dfrac{1}{2}mv_\theta^2\)得)有效势能(总势能)对位置求导为0的是平衡点,其中二阶导大于\(0\)的是......
  • 【学习笔记】 - 基础数据结构 :Link-Cut Tree(进阶篇)
    前言LCT没题写可以去写树剖和一些线段树合并的题练手LCT的概念原本的树剖是对树进行剖分,剖分为重边和轻边LCT则是对于树分为虚边和实边,特殊的,LCT可以没有虚边(例:银河英雄传说v2)单独被包含在一个实链里的点称作孤立点在树剖中,我们使用线段树/树状数组来维护重链在Link-Cut......
  • Vue学习笔记39--创建Vue脚手架
    创建Vue脚手架1.Vue脚手架是Vue官方提供的标准开发工具(开发平台)2.脚手架最新版本4.x3.文档:https://cli.vuejs.org/zh/操作步骤:第一步:(仅第一次执行):全局安装@vue/cli(commandlineinterface)注:安装钱建议先设置镜像==》npmconfigsetregisterhttps://registry.npm.taoba......
  • (笔记)Linux信号(signal) 机制和信号量(semaphore)机制的区别
     字面上相似,但是本质上存在巨大的差别! 一、Linux信号(signal)机制signal,又简称为信号(软中断信号)用来通知进程发生了异步事件。原理:一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来......
  • day57 动态规划part14 代码随想录算法训练营 53. 最大子数组和
    题目:53.最大子数组和我的感悟:理解难点:递推公式想错了。听课笔记:我的错误的代码:通过截图:代码易错点:老师代码:扩展写法:资料:......
  • Vue学习笔记38--单文件组件
    单文件组件命名规则如下所示:------单个单词命名规则:------方式一:temp.vue方式二:Temp.vue建议使用(可和vue开发者工具呼应)------多个单词命名规则------方式一:my-temp.vue方式二:MyTemp.vue建议使用(可和vue开发者工具呼应)组件交互相关的代码暴露方式:1.分别暴露:exportconst......