希赛考试网
首页 > 软考 > 软件设计师

图的遍历算法代码c语言

希赛网 2024-02-06 13:37:14

图是一种重要的数据结构,其应用十分广泛,包括社交网络、交通网络、电力系统、通讯网络等。图的遍历在解决各类问题时也非常常见,例如查找两个节点之间的最短路径、寻找图中的环以及图的连通性问题等等。本文将介绍图的遍历算法代码,重点介绍常见的两种算法:深度优先搜索(DFS)和广度优先搜索(BFS)。

1. DFS算法

深度优先搜索(DFS)是一种递归算法,以极大的深度优先搜索图中的各个节点。该算法依次访问图中的每个节点,直到所有节点都被访问为止。具体来说:

- 访问起始节点,并将其标记为已访问。

- 从该节点出发,访问与之相邻的节点,并将其标记为已访问。

- 对于标记为已访问的节点,从该节点出发再次访问其相邻的未访问节点。

- 重复此过程,直到所有节点都被访问。

下面是图的深度优先搜索的代码实现:

```

void DFS(int v, int visited[], int** graph, int size)

{

visited[v] = 1; // 标记该节点已访问

for(int i = 0; i < size; i++)

{

if(graph[v][i] == 1 && visited[i] == 0) // 如果该节点与当前节点相邻并且未被访问

{

DFS(i, visited, graph, size); // 递归访问该节点

}

}

}

```

其中,v表示当前正在访问的节点,visited数组用于记录各节点的访问状态,graph表示整张图,size表示图的大小。

2. BFS算法

广度优先搜索(BFS)算法一般使用队列来实现,依次访问起始节点的所有相邻节点,再访问所有这些相邻节点的相邻节点,直到所有节点都被访问为止。具体来说:

- 将起始节点加入队列。

- 访问队列中首节点的相邻节点,并将这些相邻节点加入队列。

- 重复此过程,直到队列为空。

下面是图的广度优先搜索的代码实现:

```

void BFS(int v, int visited[], int** graph, int size)

{

queue q; // 定义队列

visited[v] = 1; // 标记当前节点已访问

q.push(v); // 将当前节点加入队列

while(!q.empty())

{

int temp = q.front(); // 取出队列头部元素

q.pop();

for(int i = 0; i < size; i++)

{

if(graph[temp][i] == 1 && visited[i] == 0) // 如果该节点与当前节点相邻并且未被访问

{

visited[i] = 1; // 标记该节点已访问

q.push(i); // 将该节点加入队列

}

}

}

}

```

其中,v表示起始节点,visited数组用于记录各节点的访问状态,graph表示整张图,size表示图的大小。

3. 总结

本文介绍了图的遍历算法代码,包括深度优先搜索和广度优先搜索。深度优先搜索使用递归实现,广度优先搜索使用队列实现。这两种算法在解决图的各种问题时经常用到,如查找两个节点之间的最短路径、判断图是否连通等等。在实际使用时,需要根据具体问题进行选择。

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划