编写程序,实现无向图的深度优先搜索。
时间: 2023-06-08 14:07:20 浏览: 62
当然,我可以帮您解答这个问题。下面是一个使用 Python 实现的无向图深度优先搜索的例子:
```python
# 创建一个无向图的邻接表
graph = { 0: [1, 2], 1: [2], 2: [0, 3], 3: [3] }
visited = set() # 创建一个空的集合存储已访问的节点
def dfs(node):
visited.add(node) # 标记当前节点为已访问
print(node, end=' ')
# 递归访问与当前节点相邻的节点
for neighbor in graph[node]:
if neighbor not in visited:
dfs(neighbor)
# 从节点0开始搜索
dfs(0)
```
在这个例子中,我们使用邻接表来表示无向图。然后使用一个集合来存储已经访问过的节点,防止重复访问。我们用递归的方式实现深度优先搜索,首先标记当前节点为已访问,然后递归访问与当前节点相邻的节点。这个例子中起始节点为0,执行完这个程序后会输出深度优先搜索遍历的节点顺序为:0、1、2、3。
希望这个例子能够帮助您理解无向图的深度优先搜索。
相关问题
1.编写程序,创建无向图并实现图的深度优先搜索。C语言
以下是一个简单的C语言程序,用于创建无向图并实现深度优先搜索。
```c
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int visited[MAX];
int graph[MAX][MAX];
int n;
void DFS(int vertex) {
visited[vertex] = 1;
printf("%d ", vertex);
for(int i = 0; i < n; i++) {
if(graph[vertex][i] && !visited[i]) {
DFS(i);
}
}
}
int main() {
printf("Enter the number of vertices: ");
scanf("%d", &n);
printf("Enter the adjacency matrix:\n");
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
printf("DFS Traversal: ");
for(int i = 0; i < n; i++) {
if(!visited[i]) {
DFS(i);
}
}
printf("\n");
return 0;
}
```
程序首先要求用户输入无向图的顶点数。然后,用户将被要求输入邻接矩阵,该矩阵将用于表示图的边缘。最后,程序将执行深度优先搜索并输出遍历顺序。
在DFS函数中,我们首先将当前顶点标记为已访问,并输出该顶点的值。接下来,我们遍历所有与该顶点相邻的顶点,并对未访问的顶点递归地调用DFS函数。
请注意,我们使用全局数组visited和graph来跟踪访问状态和图的边缘。在主函数中,我们调用DFS函数来遍历所有未访问的顶点。
编写程序,对无向图G进行深度优先遍历,输出遍历结果
好的,让我来帮你解答这个问题。
以下是使用 Python 语言编写的无向图深度优先遍历的程序示例:
```python
# 定义一个函数,用于对无向图进行深度优先遍历
def dfs(graph, node, visited):
# 标记当前节点为已访问
visited.add(node)
# 输出当前节点
print(node, end=' ')
# 遍历当前节点的邻居节点
for neighbor in graph[node]:
# 如果邻居节点未被访问,则递归访问它
if neighbor not in visited:
dfs(graph, neighbor, visited)
# 定义一个无向图
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
# 以节点 A 为起点进行深度优先遍历
visited = set()
dfs(graph, 'A', visited)
```
在上面的程序中,我们使用了递归的方式对无向图进行深度优先遍历。我们首先标记当前节点为已访问,然后输出当前节点。接着遍历当前节点的邻居节点,如果邻居节点未被访问,则递归访问它。这样就可以遍历整个无向图了。
程序输出的遍历结果为:A B D E F C