繁体   English   中英

在无向图中找到第n级通路?

[英]Finding up to nth level of pathways in an undirected graph?

我创建了一个具有6个顶点的无向图,其直观表示如下: http : //i.imgur.com/EtQyspG.png

我想编写一个脚本,该脚本可以在没有给定终点的情况下从起点查找所有路径而无需重新访问同一节点。

我看过的BFS,DFS,A *算法的每个示例都需要一个最终目标节点。 但是,在较大的图中,NP很难找到从A点到Z点的所有可能路径。因此,我想找到在一定数量的移动范围内可以到达的所有目的地的所有路径(在此图中例如-路径中3个移动== 4个最大顶点)

我使用PHP数组对图进行编码,每个键是一个顶点,并且其数组包含相邻点:

<?php

$graph[1] = array(2,6);
$graph[2] = array(1,4);
$graph[3] = array(4,5);
$graph[4] = array(2,3,6);
$graph[5] = array(6,3);
$graph[6] = array(1,5,4);

但我不知道以这种方式执行路径搜索的算法。 我想要的输出将是这样的:

Path 1: 1,2
Path 2: 1,2,4
Path 3: 1,2,4,3
Path 4: 1,6
Path 5: 1,6,4,3
Path 6: 1,6,5
Path 7: 1,6,5,3

我编写所需的代码没有问题,但是算法/函数的必要步骤(假设是树遍历递归?)很难理解。

问题:应该使用哪种方法/算法来执行此操作,您是否有一个示例(或至少是伪代码)显示了给定图形输入数组时其工作方式?

单个起点和分支告诉您构建一棵树。 这只是深度有限的树搜索。 在每个级别,您都需要修剪已经访问过的节点。 伪代码在Wiki文章中

好吧,在密集图(| E |〜O(| V | ^ 2))中,输出的大小在最大移动量上是指数的,任何程序在其数据大小上至少要花费线性时间。必须输出。

执行您要求的最简单方法是采用香草递归DFS算法并对其进行修改,以便

1)顶点堆栈保持在实际堆栈中(我的意思是数组/向量/ Python列表/等,无论您在PHP中具有什么等效形式)。 在调用之前向其插入目标顶点,在调用返回后将其弹出。

2)当到达深度k时,该函数将堆栈打印到输出并返回

3)递归函数在返回之前“取消标记”当前顶点

但是我无法帮助您使用PHP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM