我正在尝试设计一个项目,该项目采用全球定位数据,如城市和州名以及纬度和位置。我也会在每对城市之间保持距离。我想用所有这些信息制作一个图形,并操纵它来执行一些图形算法。我决定让城市对象包含每个位置的数据。我现在应该有一个哈希函数来区分对象吗?我应该如何处理组合节点和删除边缘的图算法?
def minCut(self):
"""Returns the lowest-cost set of edges that will disconnect a graph"""
smcut = (float('infinity'), None)
cities = self.__selectedcities[:]
edges = self.__selectededges[:]
g = self.__makeGRAPH(cities, edges)
if not nx.is_connected(g):
print("The graph is already diconnected!")
return
while len(g.nodes()) >1:
stphasecut = self.mincutphase(g)
if stphasecut[2] < smcut:
smcut = (stphasecut[2], None)
self.__merge(g, stphasecut[0], stphasecut[1])
print("Weight of the min-cut: "+str(smcut[1]))
它的形状非常糟糕。我正在重写我的原始程序,但这是我从之前版本中采用的方法。
答案 0 :(得分:1)
根据您安装的networkx版本,可以使用min_cut的内置实现。
我安装了1.0RC1软件包并且不可用..但我升级到1.4并且min_cut就在那里。
这是一个(愚蠢的)例子:
import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(['London', 'Boston', 'NY', 'Dallas'])
g.add_edge('NY', 'Boston', capacity)
g.add_edge('Dallas', 'Boston')
g.add_edge('Dallas', 'London')
# add capacity to existing edge
g.edge['Dallas']['London']['capacity'] = 2
# create edge with capacity attribute
g.add_edge('NY', 'London', capacity=3)
print nx.min_cut(g, 'NY', 'London')
答案 1 :(得分:0)
您不需要为城市对象创建哈希函数,您可以将城市对象直接传递给Networkx - 从教程“节点可以是任何可哈希的对象,例如文本字符串,图像,XML对象,另一个Graph,一个自定义节点对象等“
您可以遍历城市列表并将其添加为节点,然后迭代距离信息以生成图表。
答案 2 :(得分:0)
合并节点时,您可以创建新节点并将这些新节点哈希到已合并的城市列表。例如,在上面的代码中,您可以命名新节点len(g)并将其哈希到stphasecut [0] + stphasecut [1]#,假设stphasecut [1]和[2]是列表。