图的遍历
来源:互联网 发布:知乎 一人之下漫画 编辑:程序博客网 时间:2024/06/05 00:39
图的遍历主要有深度优先搜索(DFS)和广度优先搜索(BFS)。
- DFS
/* 邻接表存储的图 - DFS */void Visit( Vertex V ){ printf("正在访问顶点%d\n", V);}/* Visited[]为全局变量,已经初始化为false */void DFS( LGraph Graph, Vertex V, void (*Visit)(Vertex) ){ /* 以V为出发点对邻接表存储的图Graph进行DFS搜索 */ PtrToAdjVNode W; Visit( V ); /* 访问第V个顶点 */ Visited[V] = true; /* 标记V已访问 */ for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 对V的每个邻接点W->AdjV */ if ( !Visited[W->AdjV] ) /* 若W->AdjV未被访问 */ DFS( Graph, W->AdjV, Visit ); /* 则递归访问之 */}
- BFS
/* 邻接矩阵存储的图 - BFS *//* IsEdge(Graph, V, W)检查<V, W>是否图Graph中的一条边,即W是否V的邻接点。 *//* 此函数根据图的不同类型要做不同的实现,关键取决于对不存在的边的表示方法。*//* 例如对有权图, 如果不存在的边被初始化为INFINITY, 则函数实现如下: */bool IsEdge( MGraph Graph, Vertex V, Vertex W ){ return Graph->G[V][W]<INFINITY ? true : false;}/* Visited[]为全局变量,已经初始化为false */void BFS ( MGraph Graph, Vertex S, void (*Visit)(Vertex) ){ /* 以S为出发点对邻接矩阵存储的图Graph进行BFS搜索 */ Queue Q; Vertex V, W; Q = CreateQueue( MaxSize ); /* 创建空队列, MaxSize为外部定义的常数 */ /* 访问顶点S:此处可根据具体访问需要改写 */ Visit( S ); Visited[S] = true; /* 标记S已访问 */ AddQ(Q, S); /* S入队列 */ while ( !IsEmpty(Q) ) { V = DeleteQ(Q); /* 弹出V */ for( W=0; W<Graph->Nv; W++ ) /* 对图中的每个顶点W */ /* 若W是V的邻接点并且未访问过 */ if ( !Visited[W] && IsEdge(Graph, V, W) ) { /* 访问顶点W */ Visit( W ); Visited[W] = true; /* 标记W已访问 */ AddQ(Q, W); /* W入队列 */ } } /* while结束*/}
阅读全文
0 0
- 图:图的遍历(深度优先遍历、广度优先遍历)
- java图的遍历方式(深度遍历、广度遍历)
- java图的遍历方式(深度遍历、广度遍历)
- 图的遍历(深度遍历和广度遍历)
- 图的遍历:深度优先遍历和广度优先遍历
- 图的 深度遍历 广度遍历
- 图的深度遍历和广度遍历
- 图的遍历(深度优先遍历)
- 图的遍历:深度优先遍历
- 图的遍历:宽度优先遍历
- 图的广度遍历和深度遍历
- 图的深度遍历和广度遍历
- 图的遍历-深度优先遍历
- 图的遍历-广度优先遍历
- 图的dfs遍历和bfs遍历
- 图的深度遍历和广度遍历
- 图的遍历算法-马遍历棋盘
- 图的遍历算法-马遍历棋盘
- 黑客入门到放弃---自学清单
- 【CUGBACM15级BC第30场 B】hdu 5175 Misaki's Kiss again
- GIMP 快速入门(1)
- spring-mybatis多表查询
- Swift_学习笔记_调用ObjectiveC方法
- 图的遍历
- NYOJ 26 孪生素数问题
- Buttomsheetdialog的简单实用
- 两个有序数组的中位数
- 485. Max Consecutive Ones
- 排序-简单选择
- main 函数的标准原型
- mock.js的真实数据模拟
- Nginx——基本功能介绍