您现在的位置是:首页 >

写出有向图的拓扑排序 图 - 拓扑排序 (一)

火烧 2023-03-01 08:34:00 1067
图 - 拓扑排序 (一)   拓扑排序 To ological Sort   对一个 有向无环图 Directed Acyclic Gra h简称 DAG G进行拓扑排序 是将G中所有顶点排成一个线性

图 - 拓扑排序 (一)  

  拓扑排序(Topological Sort)

  对一个 有向无环图 (Directed Acyclic Graph简称 DAG )G进行拓扑排序 是将G中所有顶点排成一个线性序列 使得图中任

  意一对顶点u和v 若 ∈E(G) 则u在线性序列中出现在v之前 ,v>

  通常 这样的线性序列称为满足拓扑次序(TopoiSicai Order)的序列 简称 拓扑序列

  注意

  ①若将图中顶点按拓扑次序排成一行 则图中所有的有向边均是从左指向右的

  ②若图中存在有向环 则不可能使顶点满足拓扑次序

  ③一个DAG的拓扑序列通常表示某种方案切实可行

  【例】一本书的作者将书本中的各章节学习作为顶点 各章节的先学后修关系作为边 构成一个有向图 按有向图的拓扑次序安

  排章节 才能保证读者在学习某章节时 其预备知识已在前面的章节里介绍过

  ④一个DAG可能有多个拓扑序列

  【例】对图G 进行拓扑排序 至少可得到如下的两个(实际远不止两个)拓扑序列 C C C C C C C

   C C 和C C C C C C C C C

  

  ⑤当有向图中存在有向环时 拓扑序列不存在

  【例】下面(a)图中的有向环重排后如(b)所示 有向边 和其它边反向 若有向图被用来表示某项工程实施方案或某项

  工作计划 则找不到该图的拓扑序列(即含有向环) 就意味着该方案或计划是不可行的

  

  无前趋的顶点优先的拓扑排序方法

  该方法的每一步总是输出当前无前趋(即人度为零)的顶点 其抽象算法可描述为

  NonPreFirstTopSort(G){//优先输出无前趋的顶点

  while(G中有人度为 的顶点)do{

  从G中选择一个人度为 的顶点v且输出之;

写出有向图的拓扑排序 图 - 拓扑排序 (一)

  从G中删去v及其所有出边;

  }

  if(输出的顶点数目<|V(G)|)

  //若此条件不成立 则表示所有顶点均已输出 排序成功

  Error( G中存在有向环 排序失败! );

  }

  对G 执行上述算法的执行过程和得到的拓扑序列是C C C C C C C C C

  注意

  无前趋的顶点优先的拓扑排序算法在具体存储结构下 为便于考察每个顶点的人度 可保存各顶点当前的人度 为避免每次选入

  度为 的顶点时扫描整个存储空间 可设一个栈或队列暂存所有入度为零的顶点

  在开始排序前 扫描对应的存储空间 将人度为零的顶点均入栈(队) 以后每次选人度为零的顶点时 只需做出栈(队)操作即可

lishixinzhi/Article/program/sjjg/201311/23813  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码