最小化最大距离

时间:2017-04-25 18:49:47

标签: python-3.x graph networkx

我正在尝试使用NetworkX来最小化路径中的最大距离 - >> v:我的想法是在一个排序边的容器中进行for循环。我会一次追加一条边,检查一条路径是否来自s - > v已创建。我的图形的节点是(城市,州),每个节点之间的距离作为我的边缘。我的代码如下。我不知道该怎么做。这是我到目前为止测试它只给了我一条路径(最小加权边缘的路径)。如果我能得到它,我将提取最小边缘并显示。节点和边权重都是从文件中读入的。然后,用户能够通过从一个距离到另一个距离的范围内的各种属性和边缘来选择城市。虽然我认为我的循环应该在找到第一条路径后中断,但它会继续并显示所有路径。

def MinMaxDist(self):
    edges = []
    for edge in self.selected_edges:
        edges.append(edge)
    edges = sorted(edges)

    while True:
        print("Input source and targe nodes in the following format: Yankton, SD")
        source = str(input("Enter a source: "))
        target  = str(input("Enter a target: "))
        if not source:
            break
        try:
            for edge in edges:
                self.graph.add_path([edge])
                if nx.all_simple_paths(self.graph, source, target):                   
                    print(list(nx.all_simple_paths(self.graph, source, target)))               
                    break
         except:
             print("No path from %s to %s" (source, target))

1 个答案:

答案 0 :(得分:1)

当您遍历边缘时,您只会突破private static String displayMenu(String mode) { @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println(mode + " mode\n"); System.out.println("Bin - Binary +"); System.out.println("Oct - Octal -"); System.out.println("Dcm - Decimal *"); System.out.println("Hex - Hexadecimal /"); System.out.println("Q - Quit ="); System.out.print("Option or value: "); String option = input.nextLine(); option.toUpperCase(); return option; } 循环而不是for循环。 while只会突破一个级别。这是您想要break的时间,以便整个函数停止执行。

我还想做一个更多Pythonic的改变。每个return - 循环都有一个for:代码只有在您没有退出循环时才会执行。

else