上述代码只能解决添加一条重边的情况,请优化代码,使其适用于所有无向带权图
时间: 2023-06-27 18:02:48 浏览: 100
好的,下面是可以处理所有无向带权图的代码:
```python
def add_edge(u, v, w):
if u not in graph:
graph[u] = {}
if v not in graph:
graph[v] = {}
if v in graph[u]:
graph[u][v] = min(graph[u][v], w)
graph[v][u] = min(graph[v][u], w)
else:
graph[u][v] = w
graph[v][u] = w
```
这个函数首先检查图中是否已经存在起点为`u`,终点为`v`的边,如果存在,则更新该边的权值为新权值`w`和原来的权值的较小值。如果不存在,则创建一条新的边,并将其权值设为`w`。同时,由于是无向图,还需要在`v`的邻接表中添加起点为`u`,终点为`v`的边,并将其权值设为`w`。
这个函数的时间复杂度是$O(1)$,与图的大小无关,因此非常适合处理大型图。
阅读全文