拓扑排序
来源:互联网 发布:mac excel 数据分析 编辑:程序博客网 时间:2024/06/14 18:07
http://bailian.openjudge.cn/practice/4084/
总时间限制: 1000ms 内存限制: 65536kB
描述
给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前。
输入
若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有2个数,分别是该条弧所关联的两个顶点编号。
v<=100, a<=500
输出
若干个空格隔开的顶点构成的序列(用小写字母)。
样例输入
6 8
1 2
1 3
1 4
3 2
3 5
4 5
6 4
6 5
样例输出
v1 v3 v2 v6 v4 v5
思路:
1. 结点struct node设置成员:
父结点个数、 子结点个数 、 子结点序号数组
2. 把结点存放在数组中 node[], 数组的编号天然与结点的序号对应
3. 输入并且记录好数组node[]当中每一个node的所有成员
4. 用cNum记录打印的结点个数,在while (cNum
#include<iostream>#include<cstring>using namespace std;struct node // 每一个结点记录: 父亲个数,儿子个数,儿子序号的数组{ int farNum; int sonNum; int son[110];};node v[110];bool visit[110] = {0};int main(){ int m,n; cin>>m>>n; int p,q; memset(v,0,sizeof(v)); // node当中的所有成员都设置成为0 for(int i=1;i<=n;i++) { cin>>p>>q; v[p].son[v[p].sonNum] = q; v[p].sonNum ++; v[q].farNum ++; } int cNum = 0; while(cNum<m) // cNum来记录打印的结点个数,其最大值是确定的 { for(int i=1;i<=m;i++) if(v[i].farNum == 0 && !visit[i]) { cout<<"v"<<i<<" "; visit[i] = true; for(int j=0;j<v[i].sonNum;j++) v[v[i].son[j]].farNum--; cNum ++; break; // 找到一个可以打印的,就推出该循坏,在进行下一轮的while循环 } } cout<<endl; return 0;}
0 0
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 【拓扑排序】
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- docker无法删除资源bug解决
- Python爬虫练习笔记二
- XCode工程中 Project 和 Targets区别
- bzoj1101 [POI2007]Zap 莫比乌斯反演
- Eclipse的maven工程不小心移除了Maven Dependencies,如何添加回来?
- 拓扑排序
- org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: b near line 1, column 49...
- Java阶段性测试--第四五六大题参考代码
- 回归
- 为对话框窗口添加菜单栏并单击弹出对话框
- C++实验5
- 考试篇(5.2) NSE4 题库 16. 入侵防御 ❀ 飞塔 (Fortinet) 网络安全专家
- c++第5次实验 数组选择
- 创建索引