【问题标题】:taking graph input from a user, for dfs algorithm从用户那里获取图形输入,用于 dfs 算法
【发布时间】:2020-06-27 22:04:25
【问题描述】:

我想编写一个 DFS 算法,它可以为我在输入询问时给出的任何图形提供 DFS 结果。

但我找不到解决方案。我唯一发现的是代码中特定图形的算法。

# Using a Python dictionary to act as an adjacency list
graph = {
    'A' : ['B','C'],
    'B' : ['D', 'E'],
    'C' : ['F'],
    'D' : [],
    'E' : ['F'],
    'F' : []
}

visited = set() # Set to keep track of visited nodes.

def dfs(visited, graph, node):
    if node not in visited:
        print (node)
        visited.add(node)
        for neighbour in graph[node]:
            dfs(visited, graph, neighbour)

# Driver Code
dfs(visited, graph, 'A')

【问题讨论】:

  • 如果代码中没有指定,图形应该从哪里来?
  • 当我们运行代码时,它需要一个名为“请输入图表”的输入。然后你可以在一行中添加你自己的图表,按回车它会给你dfs的结果
  • dfs 函数应该已经适用于任何图形,它不仅适用于此处显示的特定图形。
  • 您能举例说明如何在一行中输入一张图吗?
  • 这样吗? {“A”:[“B”,“C”],“B”:[“C”,“D”],“C”:[“D”],“D”:[“C”],“ E": ["F"], "F": ["C"]}

标签: python algorithm input user-input depth-first-search


【解决方案1】:

这是工作代码,您可以更改图表或输入您自己的代码。此 DFS 适用于加权路径。图表表示如下:

adjacency_list = {
    'A': [('B', 1)],
    'B': [('A', 1), ('C', 1)],
    'C': [('A', 1)]
}

对于输入图形输入结,然后在数组中输入元组作为邻居(使用一些字符或数字停止输入该结) 这里是 DFS

class Graph:
    def __init__(self, adjacency_list):
        self.adjacency_list = adjacency_list
        
    def __str__(self):
        return str(self.adjacency_list)
        
    def get_neighbors(self, v):
        return self.adjacency_list[v]
        
    def dfs(self, start, stop):
        visited = set([])
        
        visited.add(start)
        path = [start]
        
        while len(path) > 0:
            
            n = path[-1]
            
            if n == stop:
                print('Path found: {}'.format(path))
                return path
            
            has_unvisited = False
            
            for (m, weight) in self.get_neighbors(n):
                if m not in visited:
                    path.append(m)
                    visited.add(m)
                    has_unvisited = True
                    break

            if (not has_unvisited):
                path.pop()

        print('Path doesnt exist')
        return None

然后你用这个来调用 DFS:

g = Graph(adjacency_list)
g.dfs('A','C')

【讨论】:

  • 哇!太感谢了!!我会检查一下并尝试弄清楚它是如何工作的! thnxxx
猜你喜欢
  • 2019-04-11
  • 2019-06-19
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
相关资源
最近更新 更多