Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Graph_Networkx - Fatal编程技术网

Python 在图形上查找路径。这可以帮助我访问所有点并计算距离

Python 在图形上查找路径。这可以帮助我访问所有点并计算距离,python,python-3.x,graph,networkx,Python,Python 3.x,Graph,Networkx,我无法找到应该覆盖所有顶点和边的路径。我们还可以再次参观Vertiex 我能够找到从一个点到另一个点的路径,但这并不能覆盖所有点 import networkx as nx import matplotlib.pyplot as plt class Node: def addNode(self,graph,name,o_time,c_time): graph.add_node(name,open_time=o_time,close_time=c_time)

我无法找到应该覆盖所有顶点和边的路径。我们还可以再次参观Vertiex

我能够找到从一个点到另一个点的路径,但这并不能覆盖所有点

 import networkx as nx
 import matplotlib.pyplot as plt

 class Node:
     def addNode(self,graph,name,o_time,c_time):
         graph.add_node(name,open_time=o_time,close_time=c_time)

     def updateNode(self,graph,name,o_time,c_time):
         if name in graph:
             attrs = {name:{'open_time': o_time, 'close_time': c_time}}
             nx.set_node_attributes(graph, attrs)

 class Edge(Node):
     def addEdge(self,graph,edge1,edge2,weight):
         if edge1 not in graph:
             Node.addNode(self,graph,edge1,'None','None')
         if edge2 not in graph:
             Node.addNode(self,graph,edge2,'None','None')

         graph.add_edge(edge1,edge2,weight=weight)

 G = nx.Graph()
 d = Node()
 edge = Edge()

 d.addNode(G,'Ngurah Rai International Airport','8:00Am','8:00Pm')
 d.addNode(G,'Tanah Lot Temple','8:00Am','8:00Pm')
 d.addNode(G,'Mt Batur','9:00Am','9:00Pm')
 d.addNode(G,'Uluwatu Temple','10:00Am','10:00Pm')
 d.addNode(G,'Sacred Monkey Forest Sanctuary','10:00Am','10:00Pm')
 d.addNode(G,'Agung Rai Museum of Art','10:00Am','10:00Pm')
 d.addNode(G,'Tegallalang Rice Terrace','10:00Am','10:00Pm')
 d.addNode(G,'Waterbom Bali Indonesia','10:00Am','10:00Pm')
 d.addNode(G,'Ulun Danu Beratan Temple','10:00Am','10:00Pm')
 d.addNode(G,'Kuta Beach','10:00Am','10:00Pm')

 edge.addEdge(G,'Ngurah Rai International Airport','Kuta Beach',20)
 edge.addEdge(G,'Ngurah Rai International Airport','Uluwatu Temple',50)
 edge.addEdge(G,'Kuta Beach','Tanah Lot Temple',70)
 edge.addEdge(G,'Sacred Monkey Forest Sanctuary','Agung Rai Museum of Art',20)
 edge.addEdge(G,'Ngurah Rai International Airport','Agung Rai Museum of Art',100)
 edge.addEdge(G,'Agung Rai Museum of Art','Tegallalang Rice Terrace',60)
 edge.addEdge(G,'Sacred Monkey Forest Sanctuary','Tegallalang Rice Terrace',50)
 edge.addEdge(G,'Tegallalang Rice Terrace','Mt Batur',100)
 edge.addEdge(G,'Ngurah Rai International Airport','Waterbom Bali Indonesia',10)
 edge.addEdge(G,'Waterbom Bali Indonesia','Kuta Beach',10)
 edge.addEdge(G,'Tanah Lot Temple','Ulun Danu Beratan Temple',70)
 edge.addEdge(G,'Kuta Beach','Ulun Danu Beratan Temple',100)

 d.updateNode(G,'Los','10:00Am','10:00Pm')

 start = 'Ngurah Rai International Airport'
 for node in G.nodes():
     for path in nx.all_simple_paths(G, source=start, target=node):
         if(len(path) >= 5):
             print(path)
             print(str( nx.shortest_path_length(G, source=start, target=node, weight='weight') ) + 'Km')

 nx.draw(G,arrows=True,with_labels=True)
 plt.savefig("simple_path.png") # save as png
 plt.show()
电流输出为

我希望输出为


你说你想要一条覆盖每一条边的路。我假设你想让它覆盖每一条边一次

那么你要找的是欧拉回路。(顺便说一句,当且仅当图是连通的且所有节点都有偶数度时,它才存在)


使用
nx.eulerian\u电路(G,source=Ngurah Rai国际机场)
。文档是。

我对其进行了一些编辑,以改进格式。请检查我是否都做对了。您的问题陈述说您正在寻找一条穿过每个节点的路径,并且该路径允许重新访问任何节点。但您从一开始就在计算所有简单路径(因此它们不会重新访问任何节点)。你的方法找不到你想要的输出,因为
path
是一条简单的路径。此外,当您找到至少5个节点的路径(名为
路径
)时,您可以打印出
路径
,然后打印出从起点到给定节点的最短路径长度,而不是
路径
的长度。谢谢Joel。我确实检查过了,但我希望一次可以浏览所有顶点。边是否再次重复并不重要。是否希望它至少通过所有顶点和所有边一次?或者所有顶点至少一次?所有边至少一次。将有许多这样的路径。你在找最短的吗?或者有哪条路足够好?
'Ngurah Rai International Airport', 'Waterbom Bali Indonesia', 'Kuta Beach', 'Ulun Danu Beratan Temple', 'Tanah Lot Temple'
90Km
'Ngurah Rai International Airport', 'Agung Rai Museum of Art', 'Sacred Monkey Forest Sanctuary', 'Tegallalang Rice Terrace', 'Mt Batur'
260Km
'Ngurah Rai International Airport', 'Waterbom Bali Indonesia', 'Kuta Beach', 'Tanah Lot Temple', 'Ulun Danu Beratan Temple'
120Km
'Ngurah Rai International Airport', 'Waterbom Bali Indonesia', 'Kuta Beach', 'Ulun Danu Beratan Temple', 'Tanah Lot Temple', 'Kuta Beach', 'Ngurah Rai International Airport', 'Ulluwalu Temple', 'Ngurah Rai International Airport', 'Agung Rai Museum of Art', 'Sacred Monkey Forest Sanctuary', 'Tegallalang Rice Terrace', 'Mt Batur'