基于邻接表存储无向网的深度优先遍历
时间: 2023-08-14 15:14:21 浏览: 82
建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历.doc
5星 · 资源好评率100%
好的,下面是基于邻接表存储无向网的深度优先遍历的详细步骤:
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;
}
```
以上是基于邻接表存储无向网的深度优先遍历的详细介绍,希望能对你有所帮助。
阅读全文