在c语言中采邻接表表示下面的无向图,并对其进行深度优先遍历
时间: 2024-11-15 19:22:58 浏览: 15
在C语言中,我们可以使用邻接表(Adjacency List)来表示无向图,因为这种方式更适用于稀疏图,即边的数量远小于顶点数量的平方。邻接表通常包含两个部分:顶点列表和边的链表。每个顶点对应一个链表,链表中存储该顶点的所有邻居。
以下是一个简单的结构定义:
```c
typedef struct {
int vertex; // 顶点编号
struct AdjNode *next; // 指向下一个相邻节点的指针
} AdjNode;
// 图的结构体定义
typedef struct {
int V; // 顶点数
AdjNode **adj; // 二维数组,行代表顶点,列代表邻接表
} Graph;
```
对于深度优先遍历(Depth-First Search,DFS),可以按照如下的步骤实现:
1. 初始化函数,设置起始顶点并递归地访问其邻居。
2. DFS 函数接收当前顶点作为输入:
a. 标记当前顶点为已访问。
b. 访问当前顶点,并将其加入堆栈或递归调用自身。
c. 对于当前顶点的每一个邻居,如果邻居未访问,则递归调用 DFS 函数。
以下是基本的 C 代码实现示例:
```c
void addEdge(Graph *graph, int src, int dest) {
AdjNode* newNode = (AdjNode*)malloc(sizeof(AdjNode));
newNode->vertex = dest;
newNode->next = graph[src].adj[dest];
graph[src].adj[dest] = newNode;
}
void DFS(Graph *graph, int v, bool visited[]) {
visited[v] = true;
printf("%d ", v); // 输出顶点
AdjNode* temp = graph[v].adj[v];
while(temp != NULL) {
if(!visited[temp->vertex]) {
DFS(graph, temp->vertex, visited);
}
temp = temp->next;
}
}
```
要在整个图上执行深度优先搜索,你需要遍历所有的顶点,并对每个未访问的顶点调用 `DFS` 函数。
阅读全文