拓扑排序(链式前向星+队列实现)
来源:互联网 发布:手机淘宝兼职客服招聘 编辑:程序博客网 时间:2024/06/02 05:15
拓扑排序:对于有向无环图的排序,对于一个有向无环图来说,拓扑排序就是讲该图中的所有定点排成一个线性顺序。使得途中任意一对定点u和v,若存在边<u,v>关系,u在v之前。
实现思路:
1:从图中选择一个入度为0的顶点,并输出他
2:从图中删除该点,并且删除该定点出发的所有有向边
3:重复上述两步
代码如下:
#include<bits/stdc++.h>using namespace std;const int N = 100005;const int M = 100005;struct EdgeNode{int to;int w;int next;};EdgeNode edge[N];int head[M];int n,m;int indegree[N];void toposort(){int queue[N];int iq = 0 ;for(int i = 1 ; i <= n ; i++){if(indegree[i] == 0){queue[iq++] = i;}}for(int i = 0 ; i < iq ; i++){for(int k = head[queue[i]] ; k != -1 ; k = edge[k].next){indegree[edge[k].to] -- ;if(indegree[edge[k].to] == 0){queue[iq++] = edge[k].to;}}}for(int i = 0 ; i < iq; i ++)cout << queue[i] << " ";cout << endl; }int main(){memset(head,-1,sizeof(head));memset(indegree,0,sizeof(indegree));cin >> n >> m;for(int i = 1 ; i <= m; i ++){int a,b,c;cin >> a >> b;edge[i].to = b;edge[i].w = c;edge[i].next = head[a];head[a] = i;indegree[b] ++; }//for(int i = 1; i <= n ; i++){//for(int k = head[i] ; k != -1 ; k = edge[k].next){//cout << i << " " << edge[k].to << " " << edge[k].w << endl;//}//}toposort();return 0 ;} /*5 55 4 1 2 2 3 1 3 1 5*/
阅读全文
0 0
- 拓扑排序(链式前向星+队列实现)
- 拓扑排序模板--链式前向星
- HDU 2647 Reward (拓扑排序 + 链式前向星 )
- 深度优先搜索及拓扑排序(链式前向星实现)
- HDU1285 确定比赛名次(拓扑排序+队列优化+链式前向星)
- hdu 2647 Rewaed(拓扑排序+链式前向星)
- HDU3342 Legal or Not【拓扑排序】【链式前向星】
- HDU2647 Reward(拓扑排序+链式前向星)
- hdu2647 逆拓扑,链式前向星。
- 前向星+拓扑排序
- POJ2367Genealogical tree拓扑排序&前向星
- poj 2367 前向星+拓扑排序
- hdu5438 dfs+拓扑排序+前向星
- DFS&BFS(链式前向星实现)
- 链式前向星以及代码实现
- 链式前向星存储实现BFS
- 链式前向星
- 链式前向星
- [vijos1070]新年趣事之游戏(次小生成树)
- 图的储存结构(*链式前向星)
- 《Java专栏》— 接口
- Xcode执行Analyze静态分析
- java的冒泡排序
- 拓扑排序(链式前向星+队列实现)
- Android Studio 获取SHA1
- 每天回顾linux命令(unlink)
- 9.简单格式Excel的读取
- 解决VS中出现_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse))的问题
- APP中嵌入Android车牌识别算法的应用
- less学习(四)—关于Extend
- leetcode 691.Stickers to Spell Word
- 初学vertx