图论-拓扑排序

已结束 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&#44; Kingsoft Data Descriptor&#44; WPS Drawing Shape Format&#44; 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&amp;OSSAccessKeyId=LTAI4FscTKTKuVw4DGJZtm3S&amp;Signature=3iFPRh9pSr9P4NMWfP3itj%2Fp4wQ%3D" width="205" height="198" ksdocclipboardid="{8ad1b254-f617-94c1-b2a0-014999743402-9c75be78c4a04063e2f73a71f13e484990240d9b}" app="wpp" />
</div>

	算法思想:

  

	构造拓扑序列的拓扑排序算法思想很简单:&nbsp;
<br />

	<ol>
		<li>
			选择一个入度为0的顶点并输出;
		</li>
		<li>
			&nbsp;然后从AOV网中删除此顶点及以此顶点为起点的所有关联边;&nbsp;
		</li>
		<li>
			重复上述两步,直到不存在入度为0的顶点为止;&nbsp;
		</li>
		<li>
			若输出的顶点数小于AOV网中的顶点数,则输出“有回路信息”,否则输出的顶点序列就是一种拓扑序列。&nbsp;
		</li>
	</ol>
<br />

	&nbsp;从第四步可以看出,拓扑排序可以用来判断一个有向图是否有环。
<br />

	只有有向无环图才存在拓扑序列。&nbsp;
<br />

	<strong>算法实现:&nbsp;</strong>
<br />

	&nbsp;a)  数据结构:indgr[i]: 顶点i的入度;

   

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stack[ ]:  栈&nbsp;
<br />

	&nbsp;b)  初始化:top=0 (栈顶指针置零)&nbsp;
<br />

	&nbsp;c)  将初始状态所有入度为0的顶点压栈&nbsp;
<br />

	&nbsp;d)  i=0 (计数器)
<br />

	&nbsp;e)  while 栈非空(top&gt;0)
<br />

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i.    栈顶的顶点v出栈;top-1; 输出v;i++;&nbsp;
<br />

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii.    for v的每一个后继顶点u&nbsp;
<br />

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.   indgr[u]--;    u的入度减1&nbsp;
<br />

	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.   if (u的入度变为0)  顶点u入栈
<br />

	&nbsp;f)  算法结束&nbsp;
<br />

状态
已结束
规则
ACM/ICPC
题目
5
开始于
2024-5-26 0:00
结束于
2024-11-30 3:00
持续时间
4515 小时
主持人
参赛人数
1