博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构快速回顾——图的遍历
阅读量:6411 次
发布时间:2019-06-23

本文共 1595 字,大约阅读时间需要 5 分钟。

图的遍历指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上。
图的遍历方法目前有深度优先搜索法和广度(宽度)优先搜索法两种算法。

深度优先搜索法DFS

深度优先搜索法的基本思想是:从图G的某个顶点v0出发,访问v0,然后选择一个与v0相邻且没被访问过的顶点vi访问,再从vi出发选择一个与vi相邻且未被访问的顶点vj进行访问,依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则退回到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点w,从w出发按同样的方法向前遍历,直到图中所有顶点都被访问。

广度优先搜索法BFS

图的广度优先搜索是树的按层次遍历的推广,它的基本思想是:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点vi1,vi2,…, vi t,并均标记已访问过,然后再按照vi1,vi2,…, vi t的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点vi有路径相通的顶点都被访问过为止。
具体实现如下:
#include 
#include
#include
#include
#include
#define NODE_SIZE 100typedef struct __GRAPH{ int n; int e; int matrix[NODE_SIZE][NODE_SIZE];}Graph;//使用栈 递归式深度优先遍历 void DFS_0(Graph g, int v0, bool* visit){ int i,j,k; visit[v0] = true; printf("visit %d\t",v0); for(i =0; i
< g.n; i++) { visit[i] = false; } visit[v0] = true; printf("visit %d\t",v0); std::stack
s; s.push(v0); while(!s.empty()) { int tmpNode,i; tmpNode = s.top(); for(i =0; i
< g.n; i++) { visit[i] = false; } visit[v0] = true; printf("visit %d\t",v0); std::queue
s; s.push(v0); while(!s.empty()) { int tmpNode,i; tmpNode = s.front(); s.pop(); for(i =0; i
0) continue; g.matrix[s][t]=i+1; g.matrix[t][s]=g.matrix[s][t]; } DFS(g,0); printf("\nDFS_0: \n"); bool *visit = new bool[g.n]; for( int i =0;i < g.n; i++) { visit[i] = false; } DFS_0(g,0,visit); printf("\nBFS_0: \n"); BFS(g,0); }}
测试用例:
5	50 	10	22 	44	11	3
对应图为:
 
参考:http://baike.baidu.com/view/8844138.htm
你可能感兴趣的文章
网站管理后台模板 Charisma
查看>>
EL:empty的用法
查看>>
Saltstack配置之 nodegroups
查看>>
Servlet和JSP优化经验总结
查看>>
squid使用rotate轮询(分割)日志
查看>>
VS2015安装EF Power Tools
查看>>
MySQL主从复制(笔记)
查看>>
keepalived高可用集群的简单配置
查看>>
Android Java Framework显示Toast(无Activity和Service)
查看>>
通过 SignalR 类库,实现 ASP.NET MVC 的实时通信
查看>>
NavigationController修改状态条颜色
查看>>
16大跨平台游戏引擎
查看>>
NPS如何配置基于mac地址的8021x认证
查看>>
XenServer架构之XAPI的调用流程
查看>>
redhat下搭建LAMP架构
查看>>
GitHub详细教程
查看>>
raid技术的读与想
查看>>
Hbase 中Column Family 的作用
查看>>
用鸡讲解技术债务的形成过程?
查看>>
Linux下的Tftp服务
查看>>