【数据结构】有向无环图的查找

什么是有向无环图?

有向无环图(Directed Acyclic Graph)DAG,即图为有向图,且图中没有回环,常常用来表示事件的先后循序与依赖关系

给定

有向无环图 [V1,V2]  [V3,V4] ... ... [Vn-1,Vn], Vn表示为图中的第n个顶点(Vertex),[Vn-1,Vn] 表示在Vn-1到Vn存在一条有向边由Vn-1指向Vn,请判断该图是否为有向无环图

思考

顶点的度:与该顶点相关联的边的数量

顶点的入度:图中指向该顶点的边的数量

顶点的出度:图中由该顶点出发的边的数量

有向无环图中不存在回环,我们可以利用广度优先遍历(Breadth-First-Search)先从入度为0的顶点入手,将入度为0的顶点加入队列,依次弹出队列中顶部的顶点,将由该顶点出发的边指向的顶点的入度-1,如果由该顶点A出发的边指向的顶点B的入度-1之后的入度变为0则将该顶点B加入队列中,直到图中的所有顶点都加入队列中并弹出队列即可判断该图为有向无环图,即对该图进行拓扑排序

因此我们需要以下数据结构

vector<int> degree  用于存放每个顶点的入度

map<int,vector<int>> 用于存放由每个顶点出发的边指向的顶点

queue<int> zeroDegreeQueue 用于存放入度为0的节点

图例过程

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值