储结构,建立邻接表的算法,以及如何应用图解决具体问题(即原理与应用的结合)等。 1.从键盘输入的数据建立图,并进行深度优先搜索和广度优先搜索(验证性实验)问题描述 很多涉及图上操作的算法都是以图的遍历操作为基础的。试编写一个程序,演示无向图的遍历操作。 在主程序中提供下列菜单:(1)“1”代表图的建立; (2)“2”代表深度优先遍历图;(3)“3”代表广度优先遍历图;
时间: 2024-02-05 14:13:57 浏览: 66
数据结构与算法实验(C++):图的邻接表实验-代码
以下是一个简单的无向图遍历操作的实现,包括建立邻接表、深度优先搜索和广度优先搜索。主要思路是使用邻接表来表示图,然后通过深度优先搜索和广度优先搜索来遍历图。
```python
# 定义图的邻接表结构
class Graph:
def __init__(self, vertices):
self.vertices = vertices
self.adj_list = [[] for _ in range(vertices)]
def add_edge(self, src, dest):
self.adj_list[src].append(dest)
self.adj_list[dest].append(src)
# 深度优先搜索
def dfs(graph, start, visited):
visited.add(start)
print(start, end=' ')
for neighbor in graph.adj_list[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
# 广度优先搜索
def bfs(graph, start):
visited = set()
queue = [start]
visited.add(start)
while queue:
curr = queue.pop(0)
print(curr, end=' ')
for neighbor in graph.adj_list[curr]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
# 主程序
if __name__ == '__main__':
# 建立无向图
g = Graph(5)
g.add_edge(0, 1)
g.add_edge(0, 4)
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 3)
g.add_edge(3, 4)
# 选择遍历方式
while True:
print("\n遍历方式:")
print("1. 深度优先遍历")
print("2. 广度优先遍历")
choice = input("请选择:")
if choice == '1':
# 深度优先遍历
start_vertex = int(input("请输入起始节点:"))
visited = set()
dfs(g, start_vertex, visited)
elif choice == '2':
# 广度优先遍历
start_vertex = int(input("请输入起始节点:"))
bfs(g, start_vertex)
else:
break
```
这个程序可以通过以下步骤操作:
1. 输入节点个数和边,建立无向图。
2. 选择遍历方式,深度优先遍历或广度优先遍历。
3. 输入起始节点,程序将从该节点开始遍历整个图。
阅读全文