图论-拓扑排序
已结束
ACM/ICPC
开始于: 2024-5-26 0:00
4515
小时
主持人:
1
拓扑排序算法,只适用于AOV网(有向无环图)。
把AOV网中的所有活动排成一个序列, 使得每个活动的所有前驱活动都排在该活动的前面,这个过程称为“拓扑排序”,所得到的活动序列称为“拓扑序列”。
一个AOV网的拓扑序列是不唯一的,例如下面的这张图,它的拓扑序列可以是:ABCDE,也可以是ACBDE,或是ADBCE。
在下图所示的AOV网中,工程B和工程C显然可以同时进行,先后无所谓;但工程E却要等工程B、C、D都完成以后才能进行。
<div ksdocclipboard="ksDocClipboardId:'{8ad1b254-f617-94c1-b2a0-014999743402-9c75be78c4a04063e2f73a71f13e484990240d9b}';from:'webwpp';priorityFormat:'Art::GVML ClipFormat, Kingsoft Data Descriptor, WPS Drawing Shape Format, image/png';mimetypes:'Art::GVML ClipFormat;Kingsoft Data Descriptor;WPS Drawing Shape Format;image/png';dataType:'';srcRange:''">
<img src="https://office-imm-tmp-cn-beijing.oss-cn-beijing.aliyuncs.com/shapes%2F9c75be78c4a04063e2f73a71f13e484990240d9b%2F05f1b2db62071824e0ee19c2545f198e7534a496?Expires=1716767999&OSSAccessKeyId=LTAI4FscTKTKuVw4DGJZtm3S&Signature=3iFPRh9pSr9P4NMWfP3itj%2Fp4wQ%3D" width="205" height="198" ksdocclipboardid="{8ad1b254-f617-94c1-b2a0-014999743402-9c75be78c4a04063e2f73a71f13e484990240d9b}" app="wpp" />
</div>
算法思想:
构造拓扑序列的拓扑排序算法思想很简单:
<br />
<ol>
<li>
选择一个入度为0的顶点并输出;
</li>
<li>
然后从AOV网中删除此顶点及以此顶点为起点的所有关联边;
</li>
<li>
重复上述两步,直到不存在入度为0的顶点为止;
</li>
<li>
若输出的顶点数小于AOV网中的顶点数,则输出“有回路信息”,否则输出的顶点序列就是一种拓扑序列。
</li>
</ol>
<br />
从第四步可以看出,拓扑排序可以用来判断一个有向图是否有环。
<br />
只有有向无环图才存在拓扑序列。
<br />
<strong>算法实现: </strong>
<br />
a) 数据结构:indgr[i]: 顶点i的入度;
stack[ ]: 栈
<br />
b) 初始化:top=0 (栈顶指针置零)
<br />
c) 将初始状态所有入度为0的顶点压栈
<br />
d) i=0 (计数器)
<br />
e) while 栈非空(top>0)
<br />
i. 栈顶的顶点v出栈;top-1; 输出v;i++;
<br />
ii. for v的每一个后继顶点u
<br />
1. indgr[u]--; u的入度减1
<br />
2. if (u的入度变为0) 顶点u入栈
<br />
f) 算法结束
<br />
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 5
- 开始于
- 2024-5-26 0:00
- 结束于
- 2024-11-30 3:00
- 持续时间
- 4515 小时
- 主持人
- 参赛人数
- 1