首页 > 编程知识 正文

拓扑排序算法代码,拓扑优化

时间:2023-05-06 00:54:35 阅读:165060 作者:1293

【问题记述】有的个人家庭较大,世代关系混乱。 请整理一下这个关系。 提供每个孩子的信息。 输出序列,使得每个后辈都被列在那个人之后。

【输入格式】第一行的整数n(1=n=100 )表示家庭人数。 接下来的第n行,第I行记述第I个儿子。 在每行的末尾,0表示已写入。

【输出格式】输出序列,使得每个后辈都被列在那个人之后。 如果有多解,则输出任意解。

【输入样本】

5

0

4 5 1 0

1 0

5 3 0

3 0

【输出示例】2 4 5 3 1

题意)第I个行为I的儿子以0结束,先输出世代高的一方。 拓扑对齐算法

# include iostream # includecstdiousingnamespacestd; int r[101],c[101]; int a[101][101],ans[101]; int num,tot,temp,n,j,I; int main () {cin n; for(I=1; i=n; I ) do(CINj ); if(j!=0) {c[i];//表示I点的出法的a[i][c[i]]=j; r[j];//存j积分的收入}While(J!=0; (for ) I=1; i=n; I ) if(r[I]==0) ans[ tot]=i; //将图中所有输入阶数为零的点放入堆栈中,堆栈在一维数组中按时表示为ans[] ) }do{temp=ans[tot]; cout temp ' '; tot----; num; for(I=1; i=c[temp]; I () {r[a[temp][i]]--; if(r[a[temp][I]==0) ) /当入度变为负之后变为0时,后续点是堆栈ans[ tot]=a[temp][i]; }while(num!=n; //如果输出点的数目等于n,则该算法是系统(' pause ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。