
数据结构与算法(C语言)——图的两种遍历(DFS和BFS)
发布日期:2021-05-18 02:00:41
浏览次数:12
分类:精选文章
本文共 3058 字,大约阅读时间需要 10 分钟。
关于图的两种遍历(DFS和BFS)代码
欢迎阅读罡罡同学的文章。在学习字符串处理以及相关操作时,本人做了一系列实验,内容如下。实际遇到代码异常问题,可以在评论区留言,我会尽力解答。
adjacency list
广度优先搜索(BFS)代码实现
#include#include #define MAX 20typedef struct EdgeNode { int adjvex; struct EdgeNode *next; int weight;} EdgeNode;typedef struct VertexNode { char data; EdgeNode *firstedge;} VertexNode;typedef struct { VertexNode adjlist[MAX]; int n, e;} GraphAdjlist;int visited[MAX];void create(GraphAdjlist *G) { int i, j, k; EdgeNode *e; printf("请输入顶点数和边数:"); scanf("%d%d", &G->n, &G->e); getchar(); printf("请输入顶点边号:\n"); for (i = 0; i < G->n; i++) { scanf("%c", &G->adjlist[i].data); G->adjlist[i].firstedge = NULL; getchar(); } for (k = 0; k < G->e; k++) { printf("输入边(Vi, Vj)上的顶点序号:\n"); scanf("%d%d", &i, &j); e = malloc(sizeof(EdgeNode)); e->adjvex = j; e->next = G->adjlist[i].firstedge; G->adjlist[i].firstedge = e; e = malloc(sizeof(EdgeNode)); e->adjvex = i; e->next = G->adjlist[j].firstedge; G->adjlist[j].firstedge = e; } printf("\n");}void BFS(GraphAdjlist *G, int v) { EdgeNode *p; int queue[MAX], front = 0, rear = 0; for (i = 0; i < G->n; i++) { visited[i] = 0; printf("%c", G->adjlist[v].data); if (visited[v] == 0) { visited[v] = 1; rear = (rear + 1) % MAX; queue[rear] = v; } } while (front != rear) { front = (front + 1) % MAX; w = queue[front]; p = G->adjlist[w].firstedge; while (p != NULL) { if (visited[p->adjvex] == 0) { printf("%c", G->adjlist[p->adjvex].data); visited[p->adjvex] = 1; rear = (rear + 1) % MAX; queue[rear] = p->adjvex; } p = p->next; } } printf("\n");}int main() { GraphAdjlist G; create(&G); printf("广度优先遍历:"); BFS(&G, 0; return 0;}
深度优先搜索(DFS)代码实现
#include#include typedef struct EdgeNode { int adjvex; struct EdgeNode *next; int weight;} EdgeNode;typedef struct VertexNode { char data; EdgeNode *firstedge;} VertexNode;typedef struct { VertexNode adjlist[MAX]; int n, e;} GraphAdjlist;int visited[MAX];void DFS(GraphAdjlist *G, int i) { if (visited[i] == 0) { visited[i] = 1; printf("%c ", G->adjlist[i].data); p = G->adjlist[i].firstedge; while (p != NULL) { if (visited[p->adjvex] == 0) { DFS(G, p->adjvex); } p = p->next; } }}void DFSTraverse(GraphAdjlist *G) { int i; for (i = 0; i < G->n; i++) { if (visited[i] == 0) { DFS(G, i); } }}int main() { GraphAdjlist G; create(&G); printf("深度优先遍历:"); DFSTraverse(&G); return 0;}
总结
以上是罡罡同学在学习图的遍历算法时所完成的实验代码。通过本系列文章,读者可以了解广度优先搜索(BFS)和深度优先搜索(DFS)两种图遍历算法的实现方法及其适用场景。代码基于邻接表存储图结构,支持逆向图等特性,是学习图 traversal 的基础实践。本文将持续为大家提供更多技术案例和解决方案,欢迎在评论区交流!
如果您觉得本文对您有帮助,请记得点赞、关注并转发,罡罡同学非常感谢您的支持!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年05月01日 19时24分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python模块学习--uuid
2019-03-14
kafka+storm+hbase整合试验(Wordcount)
2019-03-14
VMware克隆虚拟机后重启network失败
2019-03-14
Hbase压力测试
2019-03-14
StreamReader & StreamWriter
2019-03-14
C#中的类、方法和属性
2019-03-14
Python爬取清朝末年医书:《醉花窗医案》,看看病症情况
2019-03-14
Python爬虫训练:爬取酷燃网视频数据
2019-03-14
Python数据分析入门(十九):绘制散点图
2019-03-14
大佬谈接口自动化,我是这样做测试框架开发的……
2019-03-14
C++版浙大PAT乙级1069(20分)测试点3答案错误解决方法
2019-03-14
hive内部错误
2019-03-14
Error:scalac: bad option: '-make:transitive'
2019-03-14
微软xp壁纸rgb
2019-03-14
浏览器刷新页面
2019-03-14
代码错误信息,微信报错
2019-03-14
easyui日期处理(开始时间和结束时间)
2019-03-14
java文件上传
2019-03-14