优化下列代码def BFSTraverse(g): global visited visited = [False] * g.getVNum() count = 0 for i in range(g.getVNum()): if not visited[i]: count += 1 print("第%s个连通块:" % count,end ='') BFS(g,i) print() def BFS(g,i): q = LinkQueue() q.offer(i) while not q.isEmpty(): u = q.poll() visited[u] = True print(g.getVex(u),end = '') v = g.firstAdj(u) while v!=-1: if not visited[v]: q.offer(v) v = g.nextAdj(u,v) v = [1,2,3,4,5,6] e = [(1,2),(2,3),(4,5)] g = ALGraph(ALGraph.GRAPHKIND_UDG,len(v),v,e) g.createGraph() BFSTraverse(g)
时间: 2024-01-18 11:04:22 浏览: 121
可以考虑以下几点来优化代码:
1. 将全局变量 visited 改为局部变量,避免变量污染和潜在的错误。
2. 在 BFS 函数中,可以不用判断 visited[u] 是否为 True,因为 BFS 函数中访问一个顶点时,visited[u] 已经被标记为 True 了。
3. 在 BFS 函数中,可以将 while 循环的条件改为 v != -1 and not visited[v],这样可以减少不必要的循环。
4. 在 BFS 函数中,可以将 visited[u] = True 放在 while 循环的最后,这样可以避免重复标记 visited[u]。
优化后的代码如下:
```
def BFSTraverse(g):
count = 0
visited = [False] * g.getVNum()
for i in range(g.getVNum()):
if not visited[i]:
count += 1
print("第%s个连通块:" % count,end ='')
BFS(g,i,visited)
print()
def BFS(g,i,visited):
q = LinkQueue()
q.offer(i)
while not q.isEmpty():
u = q.poll()
print(g.getVex(u),end = '')
v = g.firstAdj(u)
while v != -1 and not visited[v]:
q.offer(v)
v = g.nextAdj(u,v)
visited[u] = True
```
注意:上述代码中的 LinkQueue 可能是自定义的队列类,需要根据实际情况进行修改。
阅读全文