拓扑排序的简单实现
来源:互联网 发布:视频剪辑软件哪个好 编辑:程序博客网 时间:2024/05/21 21:43
拓扑排序就是把一个图的所有节点排序,使得每一条有向边(u,v)对应的u都排在v的前面
算法流程
记录图中各个点的入度,每次选取度为0的点,然后更新删除与他相邻的边,即度数减1.
1.如果没有度为0的点,说明存在圈
2.有多个说明没有确定的序列,但不影响拓扑排序
算法流程
记录图中各个点的入度,每次选取度为0的点,然后更新删除与他相邻的边,即度数减1.
1.如果没有度为0的点,说明存在圈
2.有多个说明没有确定的序列,但不影响拓扑排序
3.重边没有影响,因为度也随之增加。
int n,m;vector<int> g[105];int topo[105];int in[105];int toposort(){int degree[105];// 返回 1 表示有确定拓扑序 -1表示存在圈 0 表示没有确定拓扑序// in为各个结点的入度,topo为序列,int flag=1;for(int i=1;i<=n;i++) degree[i]=in[i];for(int i=1;i<=n;i++){int cnt=0,u=0;for(int j=1;j<=n;j++) if(degree[j]==0) cnt++,u=j;if(cnt==0) return -1;if(cnt>1) flag=0;degree[u]--;topo[i]=u;for(int j=0;j<(int)g[u].size();j++)degree[g[u][j]]--; }return flag;}
uva 10305
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <vector>#include <map>#include <cmath>#include <set>#include <queue>using namespace std;const int INF=1e9+10;const double EPS = 1e-10; typedef long long ll;int n,m;vector<int> g[105];int topo[105];int in[105];int toposort(){int degree[105];// 1 表示有确定拓扑序 -1表示存在圈 0 表示没有确定拓扑序// in为各个结点的入度,topo为序列,int flag=1;for(int i=1;i<=n;i++) degree[i]=in[i];for(int i=1;i<=n;i++){int cnt=0,u=0;for(int j=1;j<=n;j++) if(degree[j]==0) cnt++,u=j;if(cnt==0) return -1;if(cnt>1) flag=0;degree[u]--;topo[i]=u;for(int j=0;j<(int)g[u].size();j++)degree[g[u][j]]--; }return flag;} int main(){//freopen("out.txt","w",stdout);while(scanf("%d %d",&n,&m)&&n+m){memset(in,0,sizeof(in));for(int i=1;i<=n;i++)g[i].clear();for(int i=0;i<m;i++){int u,v;scanf("%d %d",&u,&v);in[v]++;g[u].push_back(v);}toposort();for(int i=1;i<=n;i++)printf("%d%c",topo[i],i==n?'\n':' ');} return 0; }
0 0
- 简单拓扑排序的实现
- 拓扑排序的简单实现
- 拓扑排序的简单实现
- 拓扑排序-简单实现
- 一个简单拓扑排序的 java 实现
- 简单的拓扑排序
- 简单的拓扑排序模板
- 拓扑排序的算法实现
- 拓扑排序的STL实现
- 邻接矩阵实现的拓扑排序
- 拓扑排序的实现_TopoSort
- 拓扑排序的原理&&实现
- 简单的拓扑排序(POJ2367)
- 杭电1285 简单的拓扑排序
- HDU-1285简单的拓扑排序
- Ordering Tasks-简单的拓扑排序
- 确定比赛名次(简单的拓扑排序)
- hdu1285 简单拓扑排序
- Ajax,Jquery请求WebService
- JavaFx 3D文件导入
- 4.剑指offer_用两个栈模拟一个队列
- 画圆
- B1011. A+B和C (15')
- 拓扑排序的简单实现
- AngularJS指令
- 链表1:从尾到头打印链表
- 《深入理解Java虚拟机》学习笔记
- buntu系统下python2.7和python3.5版本切换,更改系统和eclipse中python默认版本
- win32的输出int类型
- Spring之—— Spring-Cache key设置注意事项
- CodeForces
- openstack配额