当前位置:实例文章 » 其他实例» [文章]【数据结构】24王道考研笔记——图

【数据结构】24王道考研笔记——图

发布人:shili8 发布时间:2025-01-23 08:02 阅读次数:0

**图**

###1. 图的定义图是由顶点(也称为结点或元胞)和边组成的非线性数据结构。每个顶点代表一个实体,每条边代表两个顶点之间的关系。

###2. 图的基本概念* **顶点(Vertex):** 每个顶点都有一个唯一的标识符。
* **边(Edge):** 每条边连接两个顶点,表示它们之间的关系。每条边也可以有一个权值。
* **图的类型:**
* **无向图(Undirected Graph):** 每条边都没有方向。
* **有向图(Directed Graph):** 每条边都有方向。

###3. 图的存储结构* **邻接矩阵(Adjacency Matrix):** 使用一个二维数组来表示图。每个顶点对应一个行和一列,若两个顶点之间有边,则相应位置为1;否则为0。
* **邻接链表(Adjacency List):** 使用一个链表来存储每个顶点的邻居。

###4. 图的遍历* **深度优先搜索(Depth-First Search,DFS):** 从起始顶点开始,沿着边向下探索,直到达叶子结点或回溯。
* **广度优先搜索(Breadth-First Search,BFS):** 从起始顶点开始,沿着边向下扩展,但每层都要遍历完。

###5. 图的应用* **网络拓扑学:** 图可以用来表示网络结构。
* **交通规划:** 图可以用来表示城市交通网。
* **推荐系统:** 图可以用来表示用户之间的关系和兴趣。

###6. 常见图算法* **最短路径问题(Shortest Path Problem):** 找到两个顶点之间的最短路径。
* **最小生成树问题(Minimum Spanning Tree Problem):** 找到一个包含所有顶点且边权值最小的子图。

###7. 图的实现

class Graph:
 def __init__(self, num_vertices):
 self.num_vertices = num_vertices self.adj_matrix = [[0 for _ in range(num_vertices)] for _ in range(num_vertices)]

 def add_edge(self, u, v):
 self.adj_matrix[u][v] =1 self.adj_matrix[v][u] =1 def dfs(self, start_vertex):
 visited = [False for _ in range(self.num_vertices)]
 stack = [start_vertex]
 visited[start_vertex] = True while stack:
 vertex = stack.pop()
 print(vertex, end=" ")

 for i in range(self.num_vertices):
 if self.adj_matrix[vertex][i] ==1 and not visited[i]:
 stack.append(i)
 visited[i] = True def bfs(self, start_vertex):
 visited = [False for _ in range(self.num_vertices)]
 queue = [start_vertex]
 visited[start_vertex] = True while queue:
 vertex = queue.pop(0)
 print(vertex, end=" ")

 for i in range(self.num_vertices):
 if self.adj_matrix[vertex][i] ==1 and not visited[i]:
 queue.append(i)
 visited[i] = True# Example usageg = Graph(5)
g.add_edge(0,1)
g.add_edge(0,2)
g.add_edge(1,3)
g.add_edge(2,4)

print("DFS Traversal:")
g.dfs(0)

print("
BFS Traversal:")
g.bfs(0)


###8. 总结图是一种非线性数据结构,用于表示顶点和边之间的关系。图有多种存储结构,如邻接矩阵和邻接链表。图的遍历包括深度优先搜索和广度优先搜索。图的应用包括网络拓扑学、交通规划和推荐系统等。

其他信息

其他资源

Top