数据结构-图的遍历和应用(DAG、AOV、AOE网)

这篇具有很好参考价值的文章主要介绍了数据结构-图的遍历和应用(DAG、AOV、AOE网)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

*一、广度优先遍历(BFS)

广度优先生成树

广度优先生成森林

*二、深度优先遍历

深度优先生成树

深度优先生成森林

二、应用

2.1最小生成树

*Prim算法

*Kruskal算法

2.2最短路径

 *BFS算法

*Dijkstra算法

 *Floyd算法

*2.3有向无环图(DAG网)

 *2.4拓扑排序(AOV网)

*逆拓扑排序

 *2.5关键路径(AOE网)

*一、广度优先遍历(BFS)

类似树的广度遍历

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 FirstNeighbor(G,x):求图G中顶点x的第一个邻接点,若有则返回顶点号,没有返回-1

NextNrighbor(G,x,y):假设图G中顶点y是顶点x的邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y就是最后一个返回-1

bool visited[MAX_VERTEX_NUM];        //访问标记数组
void BFS(Graph G,int v){
    visit(v);                        //访问初始顶点v
    visited[v]=TRUE;                 //对v做已访问标记
    Enqueue(Q,v);                    //入队列
    while(!isEmpty(Q)){              
        Dequeue(Q,v);                //顶点v出队
        for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)){ //检测v所以邻接点
            if(!visited[w]){
                visit(w);            //访问顶点w
                visited[w]=TRUE;     //对w做已访问标记
                Enqueue(Q,w);        //入队列
            }
        }
    }
}
void BFSraverse(Graph G){
    for(i=0;i<G.vexnum;++i)
        visired[i]=FASLE;        //初始化标记数组
    InitQueue(Q);                //初始化辅助队列
    for(i=0;i<G.vexnum;++i)
        if(!visited[i])          //对每个连通分量调用一次BFS
            BFS(G,i);
}

空间复杂度:最坏。辅助队列O(V)

邻接矩阵时间复杂度:

邻接表时间复杂度:数据结构-图的遍历和应用(DAG、AOV、AOE网)

广度优先生成树

    邻接表生成不唯一,具体看数据先后顺序

广度优先生成森林

        一个连通分量一个树,多个(非连通图)就是森林

*二、深度优先遍历

类似树的先序遍历

数据结构-图的遍历和应用(DAG、AOV、AOE网)

bool visited[MAX_VERTEX_NUM];      //访问标记数组
void DFS(Graph G,int v){
    visit(v);                      //访问v
    visited[v]=TRUE;               //标记已访问
    for(w=FirstNeighbor(G,V);w>=0;w=NextNeighor(G,v,w))    //邻接顶点
        if(!visited[w]){
            DFS(G,w);   
        }

}
void DFSraverse(Graph G){
    for(v=0;v<G.vwxnum;++v)
        visited[v]=FALSE;
    for(v=0;v<G.vexnum;++v)
        if(!visited[v])
            DFS(G,v);
}

空间复杂度:最后O(1)  ,最坏情况:O(V)

邻接矩阵时间复杂度:

邻接表时间复杂度:数据结构-图的遍历和应用(DAG、AOV、AOE网)

邻接表存储顺序性不一致,遍历序列不一样

深度优先生成树

    邻接表生成不唯一,具体看数据先后顺序

深度优先生成森林

        一个连通分量一个树,多个(非连通图)就是森林

二、应用

2.1最小生成树

*Prim算法

从某一个顶点开始构建生成树;每一次将代价最小的新顶点纳入生成树,直到所有顶点都纳入为止

时间复杂度:    适用于边稠密图

数据结构-图的遍历和应用(DAG、AOV、AOE网)

*Kruskal算法

每次选择一条权值最小边,使这条边两头连通(已经连通不用),直到所有结点连通

时间复杂度:  适合用于边稀疏图

数据结构-图的遍历和应用(DAG、AOV、AOE网)

2.2最短路径

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 *BFS算法

数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

*Dijkstra算法

数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 *Floyd算法

  动态规划思想

 数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 每轮看数据结构-图的遍历和应用(DAG、AOV、AOE网) ,n为第几轮,n也就是几个顶点为中转点

= A
0 6 13 0 6 13 0 6 10 0 6 10
10 0 4 10 0 4 10 0 4 9 0 4
5 0 5 11 5 5 11 0 5 11 0

 中转点为第几轮换的就是几

=
-1 -1 1
2 -1 -1
-1 0 -1

 第一轮():数据结构-图的遍历和应用(DAG、AOV、AOE网),更新值

 第二轮():数据结构-图的遍历和应用(DAG、AOV、AOE网)

 第三轮():数据结构-图的遍历和应用(DAG、AOV、AOE网)

几个顶点几轮

根据上面可知到最短路径为4,根据为-1没有中转,路径为

根据上面可知到最短路径为10, 根据为1,经过顶点中转,路径为

for(int k=0;k<n;lk++){                       //考虑vk为中转点
    for(int i=0;i<n;i++){                    //遍历矩阵,i行,j列
        for(int j=0;j<n;j++){
            if(A[i][j]>A[i][k]+A[k][j]){     //以vk为中转点的路径更短
                A[i][j]=A[i][k]+A[k][j];     //最短路径
                path[i][j]=k;                //中转点
            }
        }
    }
}

 时间复杂度:

空间复杂度:

*2.3有向无环图(DAG网)

        若一个有向图中不存在环,则称为有向无环图,简称DAG图

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 有向无环图是描述含有公共子式的表达式的有效工具,列如表达式数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 DAG不可能出现重复操作数

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 *2.4拓扑排序(AOV网)

AOV网:若用DAG图表示一个工程图,其顶点表示活动,用边表示活动必选先于活动进行的这样一种关系,则这种有向图称顶点表示活动的网络,记为AOV网。是的直接前驱,是直接后继,不能自己做自己的前驱和后继。每个工程只出现一次

数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 数据结构-图的遍历和应用(DAG、AOV、AOE网)

 时间复杂度:数据结构-图的遍历和应用(DAG、AOV、AOE网)

若采用邻接矩阵则

*逆拓扑排序

数据结构-图的遍历和应用(DAG、AOV、AOE网)数据结构-图的遍历和应用(DAG、AOV、AOE网)

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 *2.5关键路径(AOE网)

        在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的        开销(如时间),称之为用边表示活动的网络,简称AOE网

数据结构-图的遍历和应用(DAG、AOV、AOE网)

源点:AOE网仅有一个入度未0的顶点,称为开始顶点(源点),表示工程的开始。

汇点:也仅有一个出度为0的顶点,称结束顶点(汇点),表示工程的结束

关键路径:从源点到汇点路径可能有多条,所有路径中,路径出度最大的为关键路径

事件(顶点)最早发生时间:决定了所有从开始的活动能够开工的最早时间

活动(边)的最早开始时间:指该活动弧的起点所表示事件的最早发生时间

事件的最迟发生时间:指不推迟整个工程前提下,事件最迟必选发生的时间

 活动(边)的最迟开始时间:指活动弧的终点所表示事件的最迟发生时间与该活动所需时间之差。 

时间余量:

数据结构-图的遍历和应用(DAG、AOV、AOE网)

 关键活动、关键路径的特性

数据结构-图的遍历和应用(DAG、AOV、AOE网)文章来源地址https://www.toymoban.com/news/detail-498453.html

到了这里,关于数据结构-图的遍历和应用(DAG、AOV、AOE网)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】图的定义,存储,遍历

    🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Dream It Possible】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔前言 🎁图的定义   🏳️‍🌈有向完全图 🏳️‍🌈无向完全图 🎁存储结构 🏳️‍🌈邻接矩阵  🎈代码

    2024年02月06日
    浏览(78)
  • 【数据结构】图的创建与遍历

    图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 线性表 :线性关系,由直接前驱和直接后继组成。 树 :层次关系,由父结点和孩子结点组成,每个结点最多有一个父结点(根

    2023年04月22日
    浏览(49)
  • 【数据结构】图的广度优先遍历

    广度优先遍历,类似于树的层次遍历,又是熟悉的队列实现。首先将第一个顶点添加到队列中,然后讲该顶点的所有邻接顶点都加入队列中,再将该顶点输出。如此重复直到遍历完整个图。 Q:队列,用于存放顶点。 front,rear:队头和队尾指针,用于入队和出队。 p:工作指针,用

    2024年02月05日
    浏览(49)
  • 数据结构 第六章 图——图的遍历

    在前面我们知道,树是一种非线性结构,为了方便它在计算机中的存储,对树进行遍历使它线性化。 而图同样也是一种非线性结构,但是图又是一种不同于树的多对多结构,所以在前面我们将其转换为了多个一对多的结构来描述它的存储结构。 图的遍历同树类似,也是从某

    2024年02月08日
    浏览(45)
  • 大话数据结构-图的深度优先遍历和广度优先遍历

      图的遍历分为深度优先遍历和广度优先遍历两种。   深度优先遍历(Depth First Search),也称为深度优先搜索,简称DFS,深度优先遍历,是指从某一个顶点开始,按照一定的规则,访问并记录下一个未访问顶点。对于非连通图,则是按连通分量,采用同一规则进行深度优

    2024年02月04日
    浏览(58)
  • (超详细)C++图的深度优先遍历、广度优先遍历(数据结构)

            根据下图,编写代码实现图的深度优先遍历和广度优先遍历。          按照英文字母顺序,以邻接表为存储结构,实现图的深度优先和广度优先遍历。遍历的顺序从顶点a开始。 以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。   (1)从顶点a,

    2024年02月08日
    浏览(60)
  • 【数据结构】邻接矩阵和邻接图的遍历

    本篇文章开始学习数据结构的图的相关知识,涉及的基本概念还是很多的。 本文的行文思路: 学习图的基本概念 学习图的存储结构——本文主要介绍邻接矩阵和邻接表 对每种结构进行深度优先遍历和广度优先遍历 话不多说,狠活献上 等等,先别急,正式学习之前先认识几个

    2024年02月04日
    浏览(52)
  • 《数据结构》实验报告六:图的表示与遍历

    1、掌握图的 邻接矩阵 和 邻接表 表示 2、掌握图的 深度优先 和 广度优先 搜索方法 3、理解 图的应用 方法 说明以下概念 1、深度优先搜索遍历:        一种图的遍历方式:从图中 任意一个 起始顶点 V 出发,接着访问它的任意一个 邻接顶点 W1 ;再从 W1 出发,访问与 W1

    2024年02月06日
    浏览(60)
  • 【数据结构与算法】图的遍历与拓扑排序

    再上一篇中我们讲了树的两种存储方式:【数据结构与算法】图——邻接表与邻接矩阵 这一篇我们可以用数组来模拟邻接表。 假设现在我们要进行n次操作,实现无向图。 首先需要一个 保存是哪个节点 的数组 e 然后就是类似指针数组的 表 h ,每个表都会连一串单链表 e,ne

    2024年02月04日
    浏览(46)
  • 【Java高阶数据结构】图-图的表示与遍历

    高阶数据结构! 图是由顶点集合及顶点间的关系组成的一种数据结构: G = ( V , E ) G raph图, v ertex顶点, e dge边 其中: 顶点集合 V = {x|x属于某个数据对象集}是有穷非空集合; E = {(x,y)|x,y属于V}或者E = {|x,y属于V Path(x, y)} ,是顶点间关系的有穷集合,也叫做边的集合。 (x, y

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包