- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
有向图中基于函数调用路径搜索方法
有向图中基于函数调用路径搜索方法
摘 要
路径搜索问题是一个重要的问题,在很多领域都能找到它的应用。本文在一个有向图环境中实现路径搜索,在给定限定路径长度的条件下,从源顶点求解所有符合条件的通往目标顶点的路径集合,并很容易地找出最短路径。采用函数递归调用的方法进行求解,在求解过程中舍弃不符合条件的路径,保留符合条件的路径。在不同的限定路径长度下,用本方法给出了生成的相应路径数目。通过实验证明,该方法能实现准确的路径搜索并快速给出搜索结果。
【关键词】路径搜索 有向图 函数调用 递归算法
路径搜索问题在科学研究领域和工程应用领域具有很重要的研究价值,因为在研究和应用过程中很多问题都最终归结为路径搜索问题,这类问题的解决具有一般性和通用性。在过去的时间里,研究者对路径搜索问题进行了广泛的研究,提出了不同的方法解决各种应用环境下的路径搜索问题。Dijkstra算法作为一个经典的最短路径求解算法,求解了从某个单源节点出发到其他节点的最短路径,在很多应用问题中得到了广泛的应用。A*算法是一种启发式路径搜索算法,它通过选取估计函数来确定其搜索方向,能够以较快的速度找到最优路径。A*算法在很多寻径问题,特别是电子游戏设计中得到了广泛的应用。遗传算法模拟了自然界中生物进化和遗传的过程,是采用优胜劣汰法则的一种智能搜索算法。遗传算法的特点是群体搜索和群体之间的个体之间进行信息交换,从而解决路径优化问题。蚁群算法是Dorigo等人提出的一种模拟进化算法,模拟了自然界中蚂蚁群体的觅食行为,是一种基于种群的启发式仿生进化算法。蚁群算法最早成功地应用于路径规划问题,由于它求解问题简单、搜索能力强,在很多领域发挥了它的作用。本文实现一种以函数调用为基础的路径搜索算法,能在有向图中搜索出所有满足条件的路径,并搜索到其中的最短路径。
1 环境图和问题定义
定义1. 图:图[5]是由定点集合及定点关系集合组成的一种数据结构,,其中,某数据对象集合是顶点有穷非空集合;或是定点之间关系的有穷集合,也称为边集合。其中,表示从u到v的一条单向通路,它是有方向的。
定义2. 有向图:有向图是指在图中顶点对是有序的,它被称为从顶点u到v的一条有向边。这样和是指不同的两条边。
定义3. 权:某些图的边具有与之相关的数,称为权。这些权可以表示从一个顶点到另一个顶点的距离、花费的代价、所需的时间、次数等。
定义4. 邻接顶点:在有向图中,如果是图中的一条有向边,则称顶点u临接到顶点v,顶点v临接于顶点u,边与顶点u与v相关联。
定义5. 顶点的度:一个顶点v的度是与它相关联的边的条数。在有向图中,顶点的度等于该顶点的入度与出度之和。其中,顶点v的入度是以v为终点的有向图边的条数,记作;顶点v的出度是以v为始点的有向图边的条数,记作。顶点v的度。
定义6. 路径:在图中,若从顶点出发,沿一些边经过一些顶点,到达顶点。则称顶点序列为从顶点到顶点的路径。它经过的边、、…、为属于E的边。
定义7. 路径长度:对于不带权的图,路径长度是指此路径上边的条数。对于带权图,路径长度是指路径上各边的权之和。
定义8. 简单路径和回路:若路径上各个顶点均不重合,则称这样的路径为简单路径。若一路径上第一个顶点与最后一个顶点重合,则这样的路径称为回路。
在图中,用C++语法定义顶点V的数据结构如下:
const int N=3;
class Vertex
{
public:
char mark;
Vertex *point[N];
};
以上结构中,mark用来表示顶点标识,Vertex *point[N]用来标识指针数组,N为顶点的出度,N取大于零的整数值。
在一个具有众多如上述数据结构定义的顶点构成的有向图中,从某顶点开始求解到另一顶点的路径。这一问题的解决有多种方案,如:Dijkstra算法、A*算法、遗传算法和蚁群算法等。本文将给出一个基于函数调用的方法求解路径搜索问题,方案具有更好的确定性和可扩展性。
2 基于函数调用的路径搜索方法
在有向图中,给定一个任意顶点v0,求解其到达目标顶点vD的路径,要求路径长度小于M(边上不带权值)。
下面给出算法描述。
主函数的程序如算法1所示。
算法1. 定义每个顶点,生成M个节点对象。
(1)初始化各个顶点对象的mark属性值;
(2)通过给顶点对象的指针数组赋值,建立有向图;
(3)定义指针变量Vertex *p,令指针p指向源顶点v0的对象;
(4)路径数目count初始化为零,路径顶点索引值index置为零,初始化由顶点构成的路径轨迹path为空;
(
原创力文档


文档评论(0)