图的遍历算法的设计与实现
时间: 2023-08-07 18:07:47 浏览: 170
图的遍历算法
图的遍历算法有两种:深度优先搜索(DFS)和广度优先搜索(BFS)。
深度优先搜索(DFS):
从图的某个顶点开始,沿着一条路径一直走到不能走为止,然后回溯到上一个顶点,再继续走其他路径,直到所有的顶点都被访问过。
实现思路:
1. 从起始顶点开始遍历,标记起始顶点为“已访问”。
2. 遍历起始顶点的邻接点,如果邻接点未被访问,递归访问邻接点。
3. 重复步骤2,直到所有顶点都被访问。
代码实现(C++):
```
void DFS(int v, bool visited[]) {
visited[v] = true;
cout << v << " ";
for (auto i = adj[v].begin(); i != adj[v].end(); ++i) {
if (!visited[*i])
DFS(*i, visited);
}
}
```
广度优先搜索(BFS):
从图的某个顶点开始,先访问该顶点,然后访问该顶点的所有邻接点,再依次访问邻接点的邻接点,直到所有顶点都被访问过。
实现思路:
1. 从起始顶点开始遍历,将起始顶点加入队列,并标记为“已访问”。
2. 从队列中取出一个顶点,遍历该顶点的邻接点,如果邻接点未被访问,将其加入队列,并标记为“已访问”。
3. 重复步骤2,直到队列为空。
代码实现(C++):
```
void BFS(int s) {
bool visited[V] = {false};
queue<int> q;
visited[s] = true;
q.push(s);
while (!q.empty()) {
int v = q.front();
cout << v << " ";
q.pop();
for (auto i = adj[v].begin(); i != adj[v].end(); ++i) {
if (!visited[*i]) {
visited[*i] = true;
q.push(*i);
}
}
}
}
```
其中,adj[] 表示邻接表,V 表示图的顶点数。
阅读全文