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

时间:2013-10-07 23:20:56

标签: c recursion matrix

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

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

ABCDEFGHIJKL
12

我在想一个递归深度优先搜索功能应该能够解决这个问题,但我无法找到一种方法来打印每一条路径。例如,如果我的函数找到路径ABDL并到达结束L,它将打印ABDL。然后它回到D并尝试找到另一条路径,如何在下一行再次从A打印?

任何输入都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

换句话说,让你的递归函数接受来自其子调用的遍历节点列表 - 遍历的子路径列表作为返回值。在函数结束时,如果您是子调用,则返回与函数本身访问的任何节点路径一起(附加到其他节点的开头,如果没有进一步的深度递归,则将单个节点附加到列表中)已为某些节点完成了。)

最后,当你不是一个子呼叫时,你将拥有一个完整的遍历所有路径的列表。只需将它们打印出来。

例如,假设您想要探索字母[AAA,ABA,ACA,ABC,ACC],并且某些路径无效(例如,您不允许在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)