c语言用邻接表实现图的存储,输出存储结构示意图,并且输出对建立的图进行深度优化搜索和
时间: 2024-05-13 15:17:37 浏览: 108
广度优先搜索的结果。
邻接表是一种常用的图的存储结构,它可以用链表来表示图中的每个节点以及节点之间的边。下面是一个用邻接表存储无向图的示意图:
```
1 ---- 2
/ \ |
/ \ |
3 --- 4 --5
```
对于上述图,我们可以使用如下的邻接表来存储:
```
1 -> 2 -> 3
2 -> 1 -> 4 -> 5
3 -> 1 -> 4
4 -> 2 -> 3 -> 5
5 -> 2 -> 4
```
其中,每一个节点都使用一个链表来存储与之相邻的节点。比如,节点1的链表中存储了节点1相邻的节点2和3。
接下来,我们可以使用深度优先搜索和广度优先搜索来遍历上述图。
深度优先搜索的过程如下:
1. 从起始节点1开始遍历,将其标记为已访问。
2. 访问节点1的相邻节点2,将其标记为已访问。
3. 访问节点2的相邻节点4,将其标记为已访问。
4. 访问节点4的相邻节点5,将其标记为已访问。
5. 因为节点5没有相邻的未访问节点,回溯到节点4。
6. 因为节点4的所有相邻节点都已经访问过,回溯到节点2。
7. 访问节点2的相邻节点5,但由于节点5已经被访问过,跳过该节点。
8. 访问节点2的相邻节点1,但由于节点1已经被访问过,跳过该节点。
9. 回溯到节点1。
10. 访问节点1的相邻节点3,将其标记为已访问。
11. 访问节点3的相邻节点4,但由于节点4已经被访问过,跳过该节点。
12. 因为节点3的所有相邻节点都已经访问过,回溯到节点1。
13. 所有节点都已经被访问过,搜索结束。
深度优先搜索的遍历结果为:1 -> 2 -> 4 -> 5 -> 3。
广度优先搜索的过程如下:
1. 从起始节点1开始遍历,将其标记为已访问。
2. 将节点1加入队列。
3. 从队列中取出节点1,并访问其相邻节点2和3,将它们标记为已访问并加入队列。
4. 从队列中取出节点2,并访问其相邻节点4和5,将它们标记为已访问并加入队列。
5. 从队列中取出节点3,并访问其相邻节点4,将它们标记为已访问并加入队列。
6. 从队列中取出节点4,并访问其相邻节点5,将它们标记为已访问并加入队列。
7. 从队列中取出节点5,但由于它没有相邻的未访问节点,直接跳过。
8. 队列为空,搜索结束。
广度优先搜索的遍历结果为:1 -> 2 -> 3 -> 4 -> 5。
阅读全文