博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓扑排序模板
阅读量:5729 次
发布时间:2019-06-18

本文共 2491 字,大约阅读时间需要 8 分钟。

三种方法类似,记录数据和删除以没有前驱的顶点为尾的箭头时有点区别

1 /*hdu1285--采用二维数组记录两者之间的关系*/ 2 #include
3 #include
4 #include
5 using namespace std; 6 int map[510][510];//前驱数量 7 int indegree[510]; 8 int queue[510];//保存拓扑序列 9 void topo(int n)10 {11 int i,j,m,t=0;12 for(j=1;j<=n;j++){13 for(i=1;i<=n;i++){14 if(indegree[i]==0){
//找出前驱数量为零的的点即每次找到第一名 15 m=i;break;16 }17 }18 queue[t++]=m;indegree[m]=-1;//将第一名的前驱数量设为-1 19 for(i=1;i<=n;++i){
//第二步将前驱中含有第一名的点前驱数量减1 20 if(map[m][i])indegree[i]--;21 }22 }23 printf("%d",queue[0]);//输出拓扑序列 24 for(i=1;i
1 /*hdu1285--采用邻接表记录两者之间的关系*/  2 #include
3 #include
4 int head[510]; 5 int indegree[510]; 6 int queue[510]; 7 int num; 8 struct stu{ 9 int to,next;10 }edge[2510];11 void inin(){
//初始化 12 memset(indegree,0,sizeof(indegree)); 13 memset(head,-1,sizeof(head));14 num=0;15 }16 void add(int a,int b){
//添加边 17 stu E={b,head[a]};18 edge[num]=E;19 head[a]=num++;20 indegree[b]++;21 }22 void topo(int n){23 int i,j,id,t=0;24 for(j=1;j<=n;j++){25 for(i=1;i<=n;i++){26 if(indegree[i]==0){27 id=i;28 break; 29 }30 }31 queue[t++]=id;indegree[id]=-1;32 for(i=head[id];i!=-1;i=edge[i].next){33 int k=edge[i].to;34 indegree[k]--;35 }36 }37 printf("%d",queue[0]);//输出拓扑序列 38 for(i=1;i
1 /*hdu1285--采用队列记录两者之间的关系*/  2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 int map[510][510]; 9 int indegree[510]; 10 void topo(int n)11 {12 int i,j,m,t=0;13 priority_queue
,greater
>Q;//按从小到大顺序输出队14 for(i=1;i<=n;i++){15 if(indegree[i]==0){16 Q.push(i);17 }18 }19 int sign=1;20 while(!Q.empty()){21 int top=Q.top();22 Q.pop();23 indegree[top]=-1;24 if(sign)25 printf("%d",top);26 else27 printf(" %d",top);28 sign=0;29 for(i=1;i<=n;i++){30 if(map[top][i]){31 indegree[i]--;32 if(indegree[i]==0){33 Q.push(i);34 }35 }36 }37 }38 printf("\n");39 }40 int main()41 {42 int n,m,i,j,a,b;43 while(scanf("%d%d",&n,&m)!=EOF){44 memset(indegree,0,sizeof(indegree));45 memset(map,0,sizeof(map));46 for(i=0;i

 

转载于:https://www.cnblogs.com/yexiaozi/p/5740649.html

你可能感兴趣的文章
Ubuntu 12.04 root用户登录设置
查看>>
存储过程点滴
查看>>
Maven编译跳过test的设置
查看>>
SQLyog图形化l数据库的操作和学习
查看>>
raspbian 怎么才能有声音?
查看>>
[LeetCode]22.Generate Parentheses
查看>>
《数据结构》—— 线性表(上)
查看>>
WEB前端 CSS选择器
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
计算A/B Test需要的样本量
查看>>
有力证据
查看>>
二叉树前序中序后序遍历的非递归方法
查看>>
nginx+tomcat实现负载均衡
查看>>
mysql 行转列列转行
查看>>
《设计模式系列》---桥接模式
查看>>
[Unity3d]Shader 着色器 学习前了解知识
查看>>
Linux中文件颜色所代表的属性和颜色
查看>>
Redrain duilib中事件委托存在的问题
查看>>
43、我的C#学习笔记9
查看>>
linux ulimit 命令
查看>>