1 编程实现如下功能:1输入无向图的顶点数、边数及各条边的顶点对建立用邻接矩阵表示的无向图。2对图进行深度优先搜索或广度优先搜索遍历二选一并输出其遍历序列。
以下是Python代码实现,包括输入无向图的顶点数、边数及各条边的顶点对,建立用邻接矩阵表示的无向图;对图进行深度优先搜索或广度优先搜索遍历,并输出其遍历序列。
class Graph:
def __init__(self, V):
self.V = V
self.adj_matrix = [[0 for i in range(V)] for j in range(V)]
def add_edge(self, u, v):
self.adj_matrix[u][v] = 1
self.adj_matrix[v][u] = 1
def dfs_util(self, v, visited, traversal):
visited[v] = True
traversal.append(v)
for i in range(self.V):
if self.adj_matrix[v][i] == 1 and not visited[i]:
self.dfs_util(i, visited, traversal)
def dfs(self, start):
visited = [False for i in range(self.V)]
traversal = []
self.dfs_util(start, visited, traversal)
return traversal
def bfs(self, start):
visited = [False for i in range(self.V)]
queue = []
traversal = []
visited[start] = True
queue.append(start)
while queue:
v = queue.pop(0)
traversal.append(v)
for i in range(self.V):
if self.adj_matrix[v][i] == 1 and not visited[i]:
visited[i] = True
queue.append(i)
return traversal
if __name__ == '__main__':
V = int(input("Enter the number of vertices: "))
E = int(input("Enter the number of edges: "))
g = Graph(V)
for i in range(E):
u, v = map(int, input("Enter edge (u v): ").split())
g.add_edge(u, v)
print("Enter 1 for DFS or 2 for BFS:")
choice = int(input())
if choice == 1:
print("DFS traversal:", g.dfs(0))
elif choice == 2:
print("BFS traversal:", g.bfs(0))
else:
print("Invalid choice")
示例输入和输出:
Enter the number of vertices: 4
Enter the number of edges: 4
Enter edge (u v): 0 1
Enter edge (u v): 0 2
Enter edge (u v): 1 3
Enter edge (u v): 2 3
Enter 1 for DFS or 2 for BFS:
1
DFS traversal: [0, 1, 3, 2]
Enter the number of vertices: 4
Enter the number of edges: 4
Enter edge (u v): 0 1
Enter edge (u v): 0 2
Enter edge (u v): 1 3
Enter edge (u v): 2 3
Enter 1 for DFS or 2 for BFS:
2
BFS traversal: [0, 1, 2, 3]
``
原文地址: https://www.cveoy.top/t/topic/gJi7 著作权归作者所有。请勿转载和采集!