图的邻接表存储及深度优先遍历
时间: 2023-10-30 07:02:11 浏览: 140
图的邻接表存储实现及深度优先遍历
4星 · 用户满意度95%
图的邻接表存储是一种常见的图的存储方式,其基本思想是将每个顶点的邻接点列表存储在一个数组中。具体来说,我们可以用一个数组来存储所有顶点,而对于每个顶点,我们用一个链表来存储其邻接点列表。
下面是一个示例图的邻接表存储:
![邻接表示例](https://img-blog.csdn.net/20180607170352208?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p4LWJsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)
对应的邻接表为:
```
0 -> 1 -> 2 -> 3
1 -> 0 -> 2 -> 4
2 -> 0 -> 1 -> 3 -> 4
3 -> 0 -> 2
4 -> 1 -> 2
```
深度优先遍历(DFS)是一种常见的图遍历算法,其基本思想是从某个顶点开始,沿着一条路径一直遍历到底,直到没有未访问的邻接点为止,然后回溯到上一个顶点,再选择另一条路径继续遍历,直到所有顶点都被访问过为止。
下面是图的深度优先遍历的代码实现,其中graph为邻接表存储的图,visited为记录每个顶点是否被访问过的数组。
```
void DFS(int v, vector<int> *graph, bool *visited) {
visited[v] = true;
cout << v << " ";
for (int i = 0; i < graph[v].size(); i++) {
int u = graph[v][i];
if (!visited[u]) {
DFS(u, graph, visited);
}
}
}
```
其中v表示当前遍历到的顶点,graph表示邻接表存储的图,visited表示记录每个顶点是否被访问过的数组。在遍历过程中,我们首先将当前顶点标记为已访问,并输出其值。然后依次遍历其邻接点,对于每个未访问过的邻接点,递归调用DFS函数进行遍历。
阅读全文