领接表的深度优先遍历代码
时间: 2024-12-22 16:09:22 浏览: 6
领接表是一种图的数据结构表示方法,它通过邻接表的形式存储顶点之间的连接。在深度优先搜索(DFS)中,我们通常从一个起点开始,尽可能深地探索分支,直到到达叶子节点,然后回溯到下一个未访问的节点。以下是使用Python和邻接表实现DFS的基本代码:
```python
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(f"Visiting {start}")
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
# 假设 graph 是邻接列表,例如 {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]}
graph = {0: [1, 2], ...} # 请替换为实际的邻接表形式
dfs(graph, 0) # 从顶点0开始遍历
```
在这个例子中,`visited`集合用于跟踪已访问的节点,避免重复访问。每次递归调用时,我们会检查邻居是否已经访问过,如果没访问过就继续进行深度优先搜索。
相关问题
领接表的深度优先遍历代码c++
领接表是一种图数据结构的表示方法,通常用于稀疏图,其中每个节点包含一个指向其邻接节点列表的指针。在C++中,使用深度优先搜索(DFS)遍历这种图可以采用递归或栈的方式。以下是使用递归的简单DFS代码示例:
```cpp
#include <iostream>
#include <vector>
// 结点结构体
struct Node {
int value;
std::vector<Node*> neighbors; // 邻接节点列表
};
void dfs(Node* node, bool visited[]) { // 递归函数
if (node != nullptr && !visited[node->value]) { // 如果节点未访问过
visited[node->value] = true; // 标记为已访问
std::cout << node->value << " "; // 访问节点值
for (Node* neighbor : node->neighbors) { // 遍历邻居
dfs(neighbor, visited); // 递归遍历邻居节点
}
}
}
int main() {
// 初始化你的图节点及邻接关系
Node nodes[] = { ... };
int num_nodes = sizeof(nodes) / sizeof(nodes[0]);
// 初始化已访问数组
bool visited[num_nodes] = {false};
// 开始深度优先遍历
for (Node* node : nodes) {
if (!visited[node->value]) {
dfs(node, visited);
}
}
return 0;
}
```
在这个例子中,`dfs()` 函数会从给定的起始节点开始,标记已访问过的节点,并递归地探索它们的邻居节点。`visited` 数组用于跟踪节点是否已被访问。
以领接表为存储结构进行图的深度优先遍历和广度优先遍历
使用邻接表作为图的存储结构,可以通过深度优先遍历和广度优先遍历来遍历整个图。
以深度优先遍历为例,可以使用递归的方式实现。具体步骤如下:
1. 从图中任意一个顶点开始遍历,将该顶点标记为已访问。
2. 遍历该顶点的所有邻接点,如果邻接点未被访问,则递归访问该邻接点。
3. 重复步骤2,直到该顶点的所有邻接点都被访问过。
4. 从未被访问的顶点中选择一个顶点,重复步骤2和步骤3,直到所有顶点都被访问过。
下面是使用Python实现邻接表存储结构的图的深度优先遍历的代码:
```python
# 定义图的邻接表存储结构
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
# 深度优先遍历函数
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=' ')
for next_node in graph[start]:
if next_node not in visited:
dfs(graph, next_node, visited)
# 从'A'顶点开始深度优先遍历整个图
dfs(graph, 'A')
```
输出结果为:A B D E F C
使用广度优先遍历同样可以遍历整个图,具体步骤如下:
1. 从图中任意一个顶点开始遍历,将该顶点标记为已访问,并将该顶点加入队列。
2. 从队列中取出一个顶点,遍历该顶点的所有邻接点,如果邻接点未被访问,则将邻接点标记为已访问,并将邻接点加入队列。
3. 重复步骤2,直到队列为空。
下面是使用Python实现邻接表存储结构的图的广度优先遍历的代码:
```python
# 定义图的邻接表存储结构
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
# 广度优先遍历函数
def bfs(graph, start):
visited = set()
queue = [start]
visited.add(start)
while queue:
node = queue.pop(0)
print(node, end=' ')
for next_node in graph[node]:
if next_node not in visited:
visited.add(next_node)
queue.append(next_node)
# 从'A'顶点开始广度优先遍历整个图
bfs(graph, 'A')
```
输出结果为:A B C D E F
阅读全文