Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.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
用Python实现图形_Python_Graph - Fatal编程技术网

用Python实现图形

用Python实现图形,python,graph,Python,Graph,我是python新手,尝试用python实现图形数据结构。 我已经写了这段代码,但是我没有得到我想要的结果。 代码: 我希望代码在最后一行打印{'S':R},但它正在打印: <__main__.NODE instance at 0x00000000029E6888> 谁能告诉我我做错了什么?另外,如果我想添加另一个函数调用,比如addnode(S,E),那么打印应该是{S:[R,E]}您会得到该输出,因为Node是一个类的实例(您从程序本身的输出中得到该提示,请参见:) 我认为

我是python新手,尝试用python实现图形数据结构。 我已经写了这段代码,但是我没有得到我想要的结果。 代码:

我希望代码在最后一行打印{'S':R},但它正在打印:

<__main__.NODE instance at 0x00000000029E6888>


谁能告诉我我做错了什么?另外,如果我想添加另一个函数调用,比如addnode(S,E),那么打印应该是{S:[R,E]}

您会得到该输出,因为
Node
是一个类的实例(您从程序本身的输出中得到该提示,请参见:

我认为您正在尝试为一些图形算法实现
邻接列表。在这些情况下,您将主要需要
颜色
和到其他
节点的距离。您可以通过以下方式获得:

for keys in adjlist:
    print keys.colournode , keys.distance

获得该输出是因为
节点
是一个类的实例(从程序本身的输出中获得该提示,请参见:

我认为您正在尝试为一些图形算法实现
邻接列表。在这些情况下,您将主要需要
颜色
和到其他
节点的距离。您可以通过以下方式获得:

for keys in adjlist:
    print keys.colournode , keys.distance

您需要打印一个标签。不能只使用变量名。节点无法知道变量的名称

class NODE:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

adjlist={}
def addno(A,B):
    global adjlist
    adjlist[A]=B

S=NODE('S')
R=NODE('R')
addno(S,R)

print adjlist    
>>> {S: R}
但是,python dict对于每个键可能只有一个值,因此不能同时保存
{S:R}
{S:V}
。相反,您需要保存aj节点阵列:

class NODE:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

adjlist={}
def addno(A,B):
    global adjlist
    if A not in adjlist:
        adjlist[A] = []
    adjlist[A].append(B)

S=NODE('S')
R=NODE('R')
V=NODE('V')
W=NODE('W')
addno(S,R)
addno(S,V)
addno(R,W)

print adjlist
{S: [R, V], R: [W]}
另外,使用不必要的全局变量是一个坏习惯。而是为图形创建一个类:

class Node:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

class Graph:
    def __init__(self):
        self.adjlist={}
    def addno(self, a, b):
        if a not in self.adjlist:
            self.adjlist[a] = []
        self.adjlist[a].append(b)
    def __repr__(self):
        return str(self.adjlist)

G=Graph()
S=Node('S')
R=Node('R')
V=Node('V')
W=Node('W')
G.addno(S,R)
G.addno(S,V)
G.addno(R,W)

print G
>>> {R: [W], S: [R, V]}

您需要打印一个标签。不能只使用变量名。节点无法知道变量的名称

class NODE:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

adjlist={}
def addno(A,B):
    global adjlist
    adjlist[A]=B

S=NODE('S')
R=NODE('R')
addno(S,R)

print adjlist    
>>> {S: R}
但是,python dict对于每个键可能只有一个值,因此不能同时保存
{S:R}
{S:V}
。相反,您需要保存aj节点阵列:

class NODE:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

adjlist={}
def addno(A,B):
    global adjlist
    if A not in adjlist:
        adjlist[A] = []
    adjlist[A].append(B)

S=NODE('S')
R=NODE('R')
V=NODE('V')
W=NODE('W')
addno(S,R)
addno(S,V)
addno(R,W)

print adjlist
{S: [R, V], R: [W]}
另外,使用不必要的全局变量是一个坏习惯。而是为图形创建一个类:

class Node:
    def __init__(self, name):
        self.name=name
    def __repr__(self):
        return self.name

class Graph:
    def __init__(self):
        self.adjlist={}
    def addno(self, a, b):
        if a not in self.adjlist:
            self.adjlist[a] = []
        self.adjlist[a].append(b)
    def __repr__(self):
        return str(self.adjlist)

G=Graph()
S=Node('S')
R=Node('R')
V=Node('V')
W=Node('W')
G.addno(S,R)
G.addno(S,V)
G.addno(R,W)

print G
>>> {R: [W], S: [R, V]}

感谢它工作得很好,最后一个问题我制作了多少个附加更多值到一个键(即使用字典)感谢它工作得很好,最后一个问题我制作了多少个附加更多值到一个键(即使用字典)