图论,导航图基础(c#版)

前言

依然在公司实习,但是待在一个比较成熟的项目组(战地风暴invasion),没什么机会着手项目代码,只能拿着项目代码自己琢磨,学习,然后由于最近玩莉莉丝的art of conquest,被它的垃圾寻路气哭了,所以想自己写写寻路系统,此版本的代码是为了unity而设计的,但是其实因为unity有成熟的navigation插件,所以权当练手了。

图论基础

我们抛开图的数学理论不谈,在计算机数据结构中的图是一种树链的扩充结构,图的遍历和树非常相似,如果你对树或者链表算法非常熟悉,那么恭喜你,图的结构你也能很快熟悉。
常见图结构

1、储存方式

图的储存主流的有两种储存方式,一种是矩阵
这里写图片描述
如果你要使用矩阵,那么推荐你使用eigen作为c++的矩阵运算库

另一种是邻接表
这里写图片描述

其实这两种储存方式都不是最佳的,因为矩阵法储存了大量的0,对于边很少的图(稀疏图)造成了很大的浪费。而邻接表法每条边都储存了两次,所以在稠密图(边很多的图)中,有一半的空间都用来储存重复的边了。

算法提要

本系列主要研究的是游戏中的导航图,所以算法都是基于稀疏图。
主要有:深度搜索,广度搜索,A star,其他的算法会在后面补充

应用

导航图常见于AI算法中的寻路,以及基于导航图的行为树或者状态机


无向稀疏连通图的实现

通用性的考虑

为了提高算法的通用性,我们不使用c++中的指针来表示邻接表中的链式结构,而是通过储存数组,和数组索引的方法来获取元素,这样我们不仅很容易扩展到各种不可直接操作内存的语言中,而且这样也便于拷贝操作(直接拷贝数组),析构操作(直接施放数组)。

索引节点

为了将实体数据&

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值