C语言实现A*算法
最近搞MTK斯凯冒泡平台的游戏开发,碰到了自动寻路的问题,很多程序员都知道A*算法,既简单有使用!
所以我也选择了A*算法,由于时间比较紧,就在网上百度此算法的C实现,确实有很多!
但经测试都有不同的问题,并不能用在商业游戏中,所以最后决定还是自己写吧!
A*原理 比较简单,网上有很多介绍的!我也是在网上看的,这里就不重复了!
由于我是Java程序员刚开始搞嵌入式C开发不久,所以有很多C用法不是很熟悉,通过搞这个算法又知道不少知识
比如
Java里的集合 C里要用链表
这也是此算法比较重要的一个技术点,遍历链表,还有删减节点,这些对于C程序员来说应该都是很简单的事情,
这里还是说一下,以便那些从JAVA转入C开发的程序员快速理解
PS: 这里使用的是 前插式单向链表
1. 数据定义
2. 插入链表
链表有头,有下一个节点的指针,新建的链表都是 HEAD->NULL,就是 头 下一个节点是NULL,
增加节点是在 头和NEXT之间插入的,这时就是 HEAD->NEXT0->NULL,
再增加一个节点: HEAD->NEXT1->NEXT0->NULL,
插入链表的代码示例
3. 链表上节点的删除
有时,需要将一个节点从链表中删除,比如当前链表数据为 HEAD->NEXT1->NEXT0->NULL,
将其中的NEXT1节点删除(释放)掉,
那么就需要先有一个指针指向NEXT1
然后把HEAD指向NEXT1的下一个节点,也就是NEXT0
最后再free( NEXT1 );
删除链表某节点的示例代码
4. 遍历链表
链表的遍历,就是从HEAD开始,按下一个节点,顺序找到一个为NULL的节点就遍历完整个链表了!
遍历链表的代码示例
5. 链表的删除
链表,链表上节点的数据都是在程序中临时创建出来的,这些数据都使用的是堆内存,当链表不在使用的时候需要手动释放,
<