当前位置: 首页 > news >正文

贵阳网站建设费用/企业建站都有什么网站

贵阳网站建设费用,企业建站都有什么网站,外贸模板网站,wordpress外链跳转过渡页插件7.3 图的遍历7.3.1 图的深度优先遍历(Depth First Traversal)同树的遍历类似,对于给定的图, 沿着一些边(或弧)访问图中所有的顶点,且使每个顶点仅被访问一次,这个过程叫作图的遍历。由于图中可能存在回路&a…

7.3 图的遍历

  • 7.3.1 图的深度优先遍历(Depth First Traversal)

同树的遍历类似,对于给定的图, 沿着一些边(或弧)访问图中所有的顶点,且使每个顶点仅被访问一次,这个过程叫作图的遍历
由于图中可能存在回路,且图的任一顶点都可能与其他顶点相邻接,所以在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。因此,在图的遍历过程中, 为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组tag[ ],其中每一个元素代表图中的一个顶点是否被访问,其初始状态是每一个元素都为0,表示图中所有顶点都没有被访问。在图的遍历过程中,一旦某一个顶点v,被访问,就立即置tag[vi]为1,表示该顶点已被访问,从而防止它被多次访问。
图的遍历通常有两种方法:深度优先遍历(depth first traversal)和广度优先遍历(breadth first traversal).这两种方法对无向图和有向图都是适用的,但在下面的讨论中将主要介绍对无向图的遍历;对于有向图的遍历,需要略微修改。

7.3.1 图的深度优先遍历(Depth First Traversal)

  1. 图的深度优先遍历基于深度优先搜索(depth first search,DFS)。深度优先搜索是从图中某一顶点v出发,在访问顶点v后,再依次从v的任一还没有被访问的邻接顶点w出发进行深度优先搜索,直到图中所有与顶点v有路径相通的顶点都被访问过为止。这是一个递归定义,所以图的深度优先搜索可以用递归算法实现。
  2. 图7-15(a)给出了深度优先搜索的示例。由于该图是连通的,所以从顶点A出发,通过一次深度优先搜索即可访问图中的所有顶点。图的深度优先遍历的访问顺序与树的前序遍历顺序类似。
    在这里插入图片描述
    图7-15(b)给出了在深度优先遍历的过程中,访问的所有顶点和经过的边,图中各顶点旁附加的数字表示各顶点被访问的次序。在图7-15(b)中,共有n-l条边连接了所有n个顶点,在此把它称为图7-15(a)的深度优先搜索生成树。
  3. 从指定的结点v开始进行深度优先搜索的算法思想:
    1)访问结点v,并标记v已被访问。
    2)取顶点v的第一个邻接顶点w。
    3)若顶点w不存在,算法结束;否则继续步骤(4)。
    4)若顶点w未被访问,则访问结点w,并标记w已被访问。
    5)使w为顶点v的在原来w之后的下一个邻接顶点,转到步骤(3)。
  4. 深度优先遍历 DFT 代码实现
    利用无向图邻接矩阵。
///深度优先搜索 BFS
template <class ElemType>
void DFS(const AdjMatrixUndirGraph<ElemType> &g, int v, void (*Visit)(const ElemType &))
// 初始条件:存在图g
// 操作结果:从顶点v出发进行深度优先搜索
{	ElemType e;	g.SetTag(v, VISITED);		// 设置顶点v已访问标志g.GetElem(v, e);			// 取顶点v的数据元素值 Visit(e);					// 访问顶点vfor (int w = g.FirstAdjVex(v); w != -1; w = g.NextAdjVex(v, w))if (g.GetTag(w) == UNVISITED)DFS(g, w , Visit);	// 从v的尚未访问过的邻接顶点w开始进行深度优先搜索
}///深度优先遍历DFT
#include <stack>
template <class ElemType>
void DFSTraverse(const AdjMatrixUndirGraph<ElemType> &g, void (*Visit)(const ElemType &))
// 初始条件:存在图g
// 操作结果:对无向图g进行深度优先遍历
{int v;for (v = 0; v < g.GetVexNum(); v++)g.SetTag(v, UNVISITED);// 对每个顶点设置未访问标志for (v = 0; v < g.GetVexNum(); v++)if (g.GetTag(v) == UNVISITED)DFS(g, v , Visit);// 从尚未访问的顶点v开始进行深度优先搜索 
}///深度优先遍历非递归算法,利用栈
template <class ElemType>
void DFSTraverse_nonrecursion(const AdjMatrixUndirGraph<ElemType> &g, void (*Visit)(const ElemType &))
{int v,w;for (v = 0; v < g.GetVexNum(); v++)g.SetTag(v, UNVISITED);// 对每个顶点设置未访问标志ElemType e;stack<int> s;for (v = 0; v < g.GetVexNum(); v++){while(g.GetTag(v) == UNVISITED){if(g.GetTag(v) == UNVISITED){g.SetTag(v, VISITED);		// 设置顶点v已访问标志g.GetElem(v, e);			// 取顶点v的数据元素值Visit(e);					// 访问顶点vs.push(v);for (w = g.FirstAdjVex(v); w != -1; w = g.NextAdjVex(v, w)){if(g.GetTag(w) == UNVISITED){v=w;break;}}if(w!=-1)continue;}while(!s.empty()){v=s.top();for (w = g.FirstAdjVex(v); w != -1; w = g.NextAdjVex(v, w)){if(g.GetTag(w) == UNVISITED){v=w;break;}}if(w==-1){s.pop();}elsebreak;}}}
}
  1. 算法效率:
    (1)对于邻接矩阵表示,要在矩阵中扫描n个顶点,要执行一个双层循环,故时间复杂性为O(n^2)。
    (2)设图的边数为e,对于邻接表表示,要扫描有n个分量的数组和单链表表示的e条边,故时间复杂性为 O(n+e)。
http://www.jmfq.cn/news/4815829.html

相关文章:

  • 哈尔滨最好的网站建设公司/企业文化宣传策划方案
  • 厦门网站建设开发公司/windows优化大师的特点
  • 企业网站开发与设计论文/澎湃新闻
  • 达人室内设计网官网入口/优化设计五年级下册数学答案
  • 食品网站建设方案/微信引流推广怎么找平台
  • 域名怎么绑定自己网站/兰州正规seo整站优化
  • 怎样做下载网站/seo外包如何
  • 什么学做网站/制作网站的公司有哪些
  • 制作h5的基本流程/阳山网站seo
  • 湘潭建设公司网站/网站是怎么优化的
  • 自考在线做试卷的网站/杭州网站优化公司
  • 西安保洁公司网站建设/网站关键词快速排名工具
  • 广州黄埔做网站/关键词优化是怎样收费的
  • 东莞网站开发报价/广州网站建设推荐
  • 怎么查看网站是否做静态化处理/营销软文小短文
  • 成都金牛区建设局网站/产品推广图片
  • 查询网页怎么制作/站长之家seo查询官方网站
  • 农村电商扶贫网站建设/爱网站
  • 阿里云centos7做网站/关键词可以分为哪三类
  • 网站官网怎么做/浏览器下载安装2023版本
  • mail企业邮箱登录入口/宁波正规优化seo公司
  • 如何使用c 进行网站开发/免费二级域名建站
  • 网站外链建设:论坛签名是否还值得做/新东方教育培训机构官网
  • 淘宝客为什么做网站/新版阿里指数官网
  • 百度商桥网站代码去哪里添加/长春seo外包
  • html做的网站怎么弄/百度网盘app下载安装
  • 建行网站/百度推广点击软件
  • 厦门php网站建设/买外链有用吗
  • 东乡做网站/中国新闻网最新消息
  • 怎么套模板 网站/北京全网推广