java - 使用Python查找图中两个顶点(节点)之间的所有路径

标签 java python graph python-2.7 graph-algorithm

我有以下Python代码,它与有向图完美配合。 我的问题是如何修改代码以找到所有忽略边缘方向的路径。

例如,如果我们有以下连接:

1->2

3->2

我的代码不会返回 1 和 3 之间的路径,这是预期的结果。但是忽略边缘的方向,代码应该找到从 1 到 3 的路径。

我希望代码忽略方向并找到两个给定节点之间的所有路径。

我尝试了建议的解决方案,效果非常好,解决方案是:“最简单的解决方案可能是通过为中的每个 A->B 添加弧 B->A 来预处理图形。图表。

我真正想要的是修改算法本身以按原样处理图形。

Python 代码:

# a sample graph
graph = {'A': ['B', 'C','E'],
             'B': ['A','C', 'D'],
             'C': ['D'],
             'D': ['C'],
             'E': ['F','D'],
             'F': ['C']}

class MyQUEUE: # just an implementation of a queue

    def __init__(self):
        self.holder = []

    def enqueue(self,val):
        self.holder.append(val)

    def dequeue(self):
        val = None
        try:
            val = self.holder[0]
            if len(self.holder) == 1:
                self.holder = []
            else:
                self.holder = self.holder[1:]   
        except:
            pass

        return val  

    def IsEmpty(self):
        result = False
        if len(self.holder) == 0:
            result = True
        return result


path_queue = MyQUEUE() # now we make a queue


def BFS(graph,start,end,q):

    temp_path = [start]

    q.enqueue(temp_path)

    while q.IsEmpty() == False:
        tmp_path = q.dequeue()
        last_node = tmp_path[len(tmp_path)-1]
        #print tmp_path
        if last_node == end:
            print "VALID_PATH : ",tmp_path
        for link_node in graph[last_node]:
            if link_node not in tmp_path:
                new_path = []
                new_path = tmp_path + [link_node]
                q.enqueue(new_path)

BFS(graph,"A","D",path_queue)

-------------代码的输出--------------------

['A', 'B', 'D'] 
['A', 'C', 'D']
['A', 'E', 'D']
['A', 'B', 'C', 'D']
['A', 'E', 'F', 'C', 'D']

注意:我标记了 Java,以防有人在 Java 中解决相同问题

最佳答案

最简单的解决方案可能是通过为图表中的每个 A->B 添加弧线 B->A 来预处理图表。然后您应该能够按原样使用您的算法。

关于java - 使用Python查找图中两个顶点(节点)之间的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883350/

相关文章:

java - 日志 - 如何删除日志文件中的数据库信息

Python:带参数的多处理函数

python - 有没有办法将 pl.Datetime 类型的 pl.Series 从一个时区转换为另一个时区?

java - 在 JUNG 中更改顶点的大小/颜色

java - 文件名、目录名或卷标语法不正确 - Kotlin - Maven

java - 使用 JCE 的 AES/EAX 加密 - Mac 在 EAX 中检查失败

java - 如何在java应用程序运行时更新css文件

python - 如果数据帧包含在另一个数据帧中,Pandas 会从数据帧中删除该行

algorithm - "(1:k) Tree-Matching"- 多项式时间内可解吗?

python - Neo4j/Cypher - 具有多个查询的分页