确定图是有向图还是无向图 完整代码:

问题描述

任何人都可以提供一些关于如何编写一个方法的建议,该方法在 python 中有向图或无向图时返回?

谢谢。


class DiGraph :
    def __init__ ( self ) :
        self._adj = {}
        
    def add_node ( self,u ) :
        if u not in self._adj :
            self._adj [ u ] = []
            
    def add_edge ( self,u,v,weight =1) :
        self.add_node ( u )
        self.add_node ( v )
        self._adj [ u ].append (( v,weight ) )

解决方法

我不确定这是否是您要找的东西,但我是这么认为的。

some_graph = DiGraph()
some_graph.add_edge("a","b")
some_graph.is_directed()

这将返回 True,因为在一个方向上只有一条边。

some_graph = DiGraph()
some_graph.add_edge("a","b")
some_graph.add_edge("b","a")
some_graph.is_directed()

这将返回 False,因为在两个方向上都有具有相同权重的边。

some_graph = DiGraph()
some_graph.add_edge("a","a",2)
some_graph.is_directed()

这将返回 True,因为即使在两个方向上都有边,它们的权重也不同。

完整代码:

class DiGraph :
    def __init__ ( self ) :
        self._adj = {}
        
    def add_node ( self,u ) :
        if u not in self._adj :
            self._adj [ u ] = []
            
    def add_edge ( self,u,v,weight =1) :
        self.add_node ( u )
        self.add_node ( v )
        self._adj [ u ].append (( v,weight ) )

    def is_directed ( self ) :
        for u,neigh in self._adj.items():
            for n in neigh:
                print("u","neigh:",neigh)
                if n[0] != u and not ([(node,w) for node,w in self._adj[n[0]] if (node==u and w==n[1])]):
                    return True
        return False

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...