2

我正在尝试设计一个获取全球定位数据的项目,例如城市和州名以及纬度和位置。我还将了解每对城市之间的距离。我想用所有这些信息制作一个图形,并操纵它来执行一些图形算法。我决定让城市对象包含每个位置的数据。现在我应该有一个散列函数来区分对象吗?我应该如何处理组合节点和删除边的图形算法?

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]))

它的状态真的很糟糕。我正在重写我的原始程序,但这是我从以前的版本中采用的方法。

4

3 回答 3

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')
于 2011-01-19T19:40:14.167 回答
0

您不需要为城市对象创建哈希函数,您可以将城市对象直接传递给 Networkx - 从教程“节点可以是任何可哈希对象,例如文本字符串、图像、XML 对象、另一个图形,自定义节点对象等”

您可以迭代城市列表并将它们添加为节点,然后迭代距离信息以制作图表。

你看过教程吗? http://networkx.lanl.gov/tutorial/tutorial.html

于 2011-01-19T18:54:04.873 回答
0

在合并节点时,您可以创建新节点并将这些新节点散列到已合并的城市列表中。例如,在上面的代码中,您可以将新节点命名为 len(g) 并将其散列到 stphasecut[0]+ stphasecut[1] # 假设 stphasecut[1] 和 [2] 是列表。

于 2011-01-19T19:27:48.007 回答