图的基本操作实现代码
时间: 2023-10-26 15:09:25 浏览: 30
图是一种非常重要的数据结构,在实际工程中经常用到。下面是常见的图的基本操作实现代码,包括创建图、添加节点、添加边、删除节点、删除边、深度优先遍历、广度优先遍历等。
```python
class Graph:
def __init__(self):
self.nodes = set()
self.edges = {}
def add_node(self, node):
self.nodes.add(node)
if node not in self.edges:
self.edges[node] = []
def add_edge(self, node1, node2, weight=1):
self.add_node(node1)
self.add_node(node2)
self.edges[node1].append((node2, weight))
self.edges[node2].append((node1, weight))
def remove_node(self, node):
self.nodes.remove(node)
for n, edges in self.edges.items():
for e in edges:
if e[0] == node:
edges.remove(e)
def remove_edge(self, node1, node2):
for e in self.edges[node1]:
if e[0] == node2:
self.edges[node1].remove(e)
break
for e in self.edges[node2]:
if e[0] == node1:
self.edges[node2].remove(e)
break
def dfs(self, start):
visited = set()
stack = [start]
while stack:
node = stack.pop()
if node not in visited:
visited.add(node)
stack.extend([n[0] for n in self.edges[node]])
return visited
def bfs(self, start):
visited = set()
queue = [start]
while queue:
node = queue.pop(0)
if node not in visited:
visited.add(node)
queue.extend([n[0] for n in self.edges[node]])
return visited
```
上面的代码实现了一个无向图,可以通过调用 `add_edge` 方法来添加边,通过调用 `remove_edge` 方法来删除边,通过调用 `add_node` 方法来添加节点,通过调用 `remove_node` 方法来删除节点。同时,还实现了深度优先遍历和广度优先遍历。