基于邻接表存储无向网的深度优先遍历
时间: 2023-08-14 22:14:21 浏览: 84
数据结构 图的深度遍历
4星 · 用户满意度95%
好的,下面是基于邻接表存储无向网的深度优先遍历的详细步骤:
1. 从一个未被访问的顶点开始,将该顶点标记为已访问,输出该顶点。
2. 遍历该顶点的邻接表,对于每个未被访问的相邻顶点,以该顶点为起点进行递归操作。
3. 递归操作完成后,回溯到上一个顶点,继续遍历该顶点的其他相邻顶点。
4. 重复步骤2和3,直到所有顶点都被访问过。
下面是基于邻接表存储无向网的深度优先遍历的伪代码:
```
void DFS(int v, bool visited[], vector<pair<int, int>> adj[])
{
visited[v] = true;
cout << v << " ";
for (auto it = adj[v].begin(); it != adj[v].end(); ++it)
{
int u = it->first;
if (!visited[u])
DFS(u, visited, adj);
}
}
void DFSUtil(int V, vector<pair<int, int>> adj[])
{
bool *visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
for (int i = 0; i < V; i++)
if (!visited[i])
DFS(i, visited, adj);
delete[] visited;
}
int main()
{
int V, E;
cin >> V >> E;
vector<pair<int, int>> adj[V];
for (int i = 0; i < E; i++)
{
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back(make_pair(v, w));
adj[v].push_back(make_pair(u, w)); //因为是无向网,所以需要添加反向边
}
DFSUtil(V, adj);
return 0;
}
```
以上是基于邻接表存储无向网的深度优先遍历的详细介绍,希望能对你有所帮助。
阅读全文