Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在无向图中找到高达n级的路径?_Php_Arrays_Graph_Graph Algorithm_Tree Traversal - Fatal编程技术网

Php 在无向图中找到高达n级的路径?

Php 在无向图中找到高达n级的路径?,php,arrays,graph,graph-algorithm,tree-traversal,Php,Arrays,Graph,Graph Algorithm,Tree Traversal,我创建了一个有6个顶点的无向图,直观地表示如下: 我想写一个脚本,可以从一个起点找到所有路径,而无需重新访问同一个节点,也无需给定终点 我看过的BFS、DFS和A*算法的每个示例都需要一个最终目标节点。然而,在一个较大的图上,找到从点a到点Z的所有可能路径可能是NP困难的。因此,我想找到在一组移动次数内可以到达的所有目的地的所有路径(例如,在这个图上--3个移动==路径中的4个最大顶点) 我使用PHP数组对图形进行编码,每个键都是一个vertice,其数组包含相邻点: <?php $gr

我创建了一个有6个顶点的无向图,直观地表示如下:

我想写一个脚本,可以从一个起点找到所有路径,而无需重新访问同一个节点,也无需给定终点

我看过的BFS、DFS和A*算法的每个示例都需要一个最终目标节点。然而,在一个较大的图上,找到从点a到点Z的所有可能路径可能是NP困难的。因此,我想找到在一组移动次数内可以到达的所有目的地的所有路径(例如,在这个图上--3个移动==路径中的4个最大顶点)

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

<?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);
我在编写所需代码方面没有问题,但是算法/函数的必要步骤(假设树遍历递归?)很难理解


问题:应该使用什么方法/算法来实现这一点,您是否有一个示例(或至少是伪代码)来说明在给定图形输入数组的情况下它是如何工作的?

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

嗯,在稠密图(| E | ~O(| V | ^2))中,输出的大小与最大移动量成指数关系,任何程序都需要时间,至少与它必须输出的数据大小成线性关系

执行您要求的操作的最简单方法是采用一个普通的递归DFS算法,并对其进行修改,以便

1) 顶点堆栈保存在一个实际堆栈中(我指的是数组/向量/Python列表/等等,PHP中的任何等效项)。在调用前插入目标顶点,在调用返回后弹出

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

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

不过,我无法具体帮助您使用PHP

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