所以我一直在尝试用 python 创建一个图形程序,其中包含 dfs、bfs 和 dijkstra 算法在其中实现的类,到目前为止已经提出:
class Vertex:
def __init__(self, name):
self.name = name
self.connections = {}
def addNeighbour(self, neighbour, cost):
self.connections[neighbour] = cost
class Graph:
def __init__(self):
self.vertexs = {}
def addVertex(self, newVertex):
new = Vertex(newVertex)
self.vertexs[newVertex] = new
def addEdge(self, src, dest, cost):
self.vertexs[src].addNeighbour(self.vertexs[dest], cost)
def dfs(self, start, end, visited):
visited[start] = True
print(start, end=' ')
if start == end:
# End node found
return True
else:
# Use depth first search
for connection in graph.vertexs[start].connections:
if visited[connection.name] == False:
if self.dfs(connection.name, end, visited) == True:
# Return true to stop extra nodes from being searched
return True
def bfs(self, start, end, visited, queue):
if len(queue) == 0:
# Queue is empty
queue.append(start)
visited[start] = True
currentNode = queue.pop(0)
print(currentNode, end=' ')
if start == end:
# End node found
return True
else:
# Do breadth first search
for connection in graph.vertexs[currentNode].connections:
if visited[connection.name] == False:
# Queue all its unvisited neighbours
queue.append(connection.name)
for newNode in queue:
self.bfs(newNode, end, visited, queue)
但我认为输出似乎有问题。如果我想从节点 1 移动到节点 0,当前的输出是:
从节点 1 到节点 0 的 DFS 遍历路径: 1 6 2 0 从节点 1 到节点 0 的 BFS 遍历路径: 1 6 2 3 0 3 4 5 从节点 1 到 0 的最短可能路径: 1 0 3 4 5 6 2 costing 10
但是,我认为输出应该是:
从节点 1 到节点 0 的 DFS 遍历路径: 1 6 2 0 4 5 3 从节点 1 到节点 0 的 BFS 遍历路径: 1 6 2 3 0 4 5 从节点 1 到节点 0 的最短路径: 1 6 2 0 costing 15
任何人都可以看到这有什么问题吗?
慕标5832272
相关分类