当前位置: 首页 > 知识库问答 >
问题:

从邻接矩阵中查找所有路径

鲁浩渺
2023-03-14

我不知道该如何解决这个问题。我得到了一个有12个节点A-L的图。17个边缘连接它们。我被告知要找到从A到L的所有路径。我可以遍历一个节点多次,但只能遍历一次边。输出应该打印每个路径和路径总数。

例如,如果只有1个路径。输出应为:

ABCDEFGHIJKL
12

我想一个递归的深度优先搜索函数应该可以解决这个问题,但我就是想不出一个打印每一条路径的方法。例如,如果我的函数找到一个路径ABDL并到达结尾L,它将打印ABDL。然后它回到D并试图找到另一条路径,我如何使它从A再次打印到下一行?

如有任何意见,将不胜感激。谢谢!

共有1个答案

汪学真
2023-03-14

或者将信息传递给最后一个节点,这样它就可以在遇到死胡同时打印它所遵循的路径,或者将遵循的路径传递回调用方,这样它就可以在最后打印整个路径。

递归调用子函数并向前传递数据应该是显而易见的...我敢说,直截了当;)

相反,让递归函数接受其子调用的遍历节点列表--遍历子路径列表作为返回值。在函数结束时,如果您是一个子调用,则返回这些路径以及函数本身访问的任何节点路径(附加到其他节点的开头,如果没有对某些节点进行进一步的深度递归,则将单个节点附加到列表中)。

在最后,当您不是子调用时,您将有一个完整的遍历所有路径的列表。打印出来就行了。

例如,假设您想浏览字母[AAA、ABA、ACA、ABC],而某些路径是无效的(例如,不允许您在A之后遍历C):

def mypathsearch(path_traversed,current_letter,remaining_letters):“”“获取已搜索的字母字符串、一个current_letter字符以及包含每个位置剩余字母组合的字符数组数组”“”

if can_traverse(path_traversed, current_letter):

    for next_letter in remaining_letters[0]:
        letters_after = remaining_letters[1:]

        sub_paths_searched = mypathsearch(
            path_traversed + current_letter, next_letter, letters_after
        )

else:
    # end of the line
    print_path_traversed(path_traversed)
 类似资料:
  • 实现图的最简单的方法之一是使用二维矩阵。在该矩阵实现中,每个行和列表示图中的顶点。存储在行 v 和列 w 的交叉点处的单元中的值表示是否存在从顶点 v 到顶点 w 的边。 当两个顶点通过边连接时,我们说它们是相邻的。 Figure 3 展示了 Figure 2 中的图的邻接矩阵。单元格中的值表示从顶点 v 到顶点 w 的边的权重。 Figure 3 邻接矩阵的优点是简单,对于小图,很容易看到哪些节

  • 问题内容: 我对图和邻接矩阵感到困惑。我正在为 一个班级做作业,我有一个节点的文本文件和一个边的文本文件,我必须 阅读它们的每一个并将它们制成一个图,然后可以在该图上执行 操作,例如确定图是否为连接,找到最小的 生成树,遍历并找到路径。但是我之前从未使用过图形 ,并且整个过程让我很困惑,我想知道 是否有人可以帮助我解释其中的一些内容。 首先,我是否要自己建立一个图(也许有节点和边类?) ,然后从中

  • 作为一项练习,我必须建立一个卫星导航系统,规划从一个位置到另一个位置的最短和最快路线。它必须尽可能快,而不需要使用太多内存。 我很难决定使用哪种结构来表示图形。我知道矩阵更适合密集图,列表更适合稀疏图。我更倾向于使用列表,因为我认为添加顶点将是这个程序中最累人的部分。 我只是想听听你们的意见。如果我把一个典型的路线图看作一个图形,其中不同的位置是节点,道路是边缘。你认为它是稀疏的还是密集的?在这种

  • 我试图实现一个无向未加权图的邻接矩阵上的BFS,它返回访问的节点数。到目前为止,我已经提出了这个,但我认为这是不对的,因为当我打印出top/vised节点时,我得到了一些节点的多次出现,而且它没有排序。我在某个地方读到过,BFS是一个拓扑排序,我得到的顺序不是排序的。

  • B)设是带有向图(无环多边)的一个邻接矩阵,其中是边到的一个权重。如果没有这样的边并且对于evrey我们有。矩阵。槽表示什么?最小权重?还是...? 知道吗? 编辑:我的意思是这些算法在图中找到哪一个?找到最大重量?最小重量?什么也没找到?

  • 在matlab中,我有一个非负数项的矩阵a。见以下一条: 我想找到所有零元素的邻居,除了零元素。这意味着我想在向量v中存储a(1,1),a(2,5),a(3,1),a(3,6),a(4,5)和a(5,1)的邻居,如果这些邻居中的一个是零,那么我就不存储它。 所谓元素(i,j)的邻居,是指离(i,j)远一个元素的元素,即A(i,j+1)、A(i,j-1)、A(i-1,j)、A(i-1,j-1)、A(