传送门: https://uva.onlinejudge.org/external/103/10305.pdf

拓扑排序(topological sort)简单题

自己代码的思路来自: ==> http://songlee24.github.io/2015/05/07/topological-sorting/

感谢n久前蔡大神扔给我这个链接2333333

 #include <bits/stdc++.h>
using namespace std; const int MAXN = ;
bool vis[MAXN];
int G[MAXN][MAXN];
int indegree[MAXN];
int main(){
int n, m;
while(cin >> n >> m){
if(n == && m == ) break;
memset(vis, false, sizeof(vis));
memset(G, , sizeof(G));
memset(indegree, , sizeof(indegree));
for(int i = ; i < m; ++i){
int a, b;
cin >> a >> b;
G[a][b] = ;
indegree[b] += ;
}
queue<int> q;
while(!q.empty()) q.pop();
for(int i = ; i <= n; ++i)
if(!indegree[i]) q.push(i);
int total = n;
while(!q.empty()){
int cur = q.front();
q.pop();
cout << cur;
if(--total) cout << " ";
vis[cur] = true;
for(int i = ; i <= n; ++i){
if(G[cur][i]){
--indegree[i];
if(!indegree[i] && !vis[i])
q.push(i);
}
}
}
cout << endl;
}
return ;
}

入门经典的思路:

 #include <bits/stdc++.h>
using namespace std; const int MAXN = ;
int n, m, t;
int vis[MAXN];
int topo[MAXN];
int G[MAXN][MAXN]; bool dfs(int cur){
//vis数组存储三个状态{-1, 0, 1}
//-1 代表该点正在访问中(正在栈帧中)
// 0 代表该点没有被访问过
// 1 代表该点及所有有关系的点都被访问过了
vis[cur] = -;
for(int i = ; i <= n; ++i)
if(G[cur][i]){
//若在访问中遇到符合要求且正在调用的点,证明图存在有向环,不存在拓扑排序
if(vis[i] < ) return false;
else if(!vis[i] && !dfs(i)) return false;
}
vis[cur] = ;
topo[--t] = cur;
return true;
}
bool toposort(){
t = n;
memset(vis, , sizeof(vis));
memset(topo, , sizeof(topo));
for(int i = ; i <= n; ++i)
if(!vis[i])
if(!dfs(i))
return false;
return true;
}
int main(){
while(cin >> n >> m){
if(n == && m == ) break;
memset(G, , sizeof(G));
while(m--){
int a, b;
cin >> a >> b;
G[a][b] = ;
}
if(toposort())
for(int i = ; i < n; ++i) cout << topo[i] << " \n"[i == n-];
}
return ;
}

UVa 10305 Ordering Tasks (例题 6-15)的更多相关文章

  1. UVA.10305 Ordering Tasks (拓扑排序)

    UVA.10305 Ordering Tasks 题意分析 详解请移步 算法学习 拓扑排序(TopSort) 拓扑排序的裸题 基本方法是,indegree表示入度表,vector存后继节点.在tops ...

  2. UVa 10305 - Ordering Tasks (拓扑排序裸题)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  3. uva 10305 ordering tasks(超级烂题)——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABHIAAAHDCAYAAABI5T2bAAAgAElEQVR4nOydPY7svLW1awQGNABHCm

  4. Uva 10305 - Ordering Tasks 拓扑排序基础水题 队列和dfs实现

    今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题. 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了... 于是检查了一遍又交了一发,还是WA. ...

  5. UVA 10305 Ordering Tasks

    题意: 给出n和m,n代表总共有几个箱子.接下来m行,每行有a,b,表示b在a之后.输出一个合理的序列. 分析: 简单的拓扑排序: 代码: #include <iostream>#incl ...

  6. UVA 10305 Ordering Tasks(拓扑排序的队列解法)

    题目链接: https://vjudge.net/problem/UVA-10305#author=goodlife2017 题目描述 John有n个任务,但是有些任务需要在做完另外一些任务后才能做. ...

  7. UVa 10305 Ordering Tasks【拓扑排序】

    题意:给出n件事情,m个二元组关系,求它们的拓扑序列 用的队列来做 #include<iostream> #include<cstdio> #include<cstrin ...

  8. UVA - 10305 Ordering Tasks(拓扑排序)

    题意:给定优先关系进行拓扑排序. 分析:将入度为0的点加入优先队列,并将与之相连的点入度减1,若又有度数为0的点,继续加入优先队列,依次类推. #pragma comment(linker, &quo ...

  9. 拓扑排序(Topological Order)UVa10305 Ordering Tasks

    2016/5/19 17:39:07 拓扑排序,是对有向无环图(Directed Acylic Graph , DAG )进行的一种操作,这种操作是将DAG中的所有顶点排成一个线性序列,使得图中的任意 ...

随机推荐

  1. vue使用resource发送ajax请求

    <script type="text/javascript"> new Vue({ el:'#app', created:function(){ var url=&qu ...

  2. [HMLY]10.iOS中block的基础用法

    本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道 ...

  3. SELinux开启和关闭

    1.查看SELinux状态 /usr/sbin/sestatus -v 2.关闭SELinux (1)临时关闭(不用重启机器): setenforce 0 #设置SELinux成为permissive ...

  4. C# Volatile 类

    关于C#中Volatile类的具体信息,请访问MSDN: https://msdn.microsoft.com/en-us/library/system.threading.volatile(v=vs ...

  5. Activiti工作流入门

    Activiti简介 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度. Activiti 作为一个遵从 Apache 许可的工 ...

  6. 2014 ACM/ICPC Asia Regional Beijing Site

    1001 A Curious Matt 1002 Black And White 1003 Collision 1004 Dire Wolf 1005 Everlasting L 1006 Fluor ...

  7. zabbix 布署实践【1 server安装】

    通过openstack环境,开通了2台只有根分区的虚拟机,   目的是为了监控公司所有的物理机,网络设备,虚拟机,总计300个台以上,推荐配置,zabbix官方文档是有给出指引的   环境:CentO ...

  8. Unity3D脚本使用:物体调用物体

    如下图4种方式: 方式5 通过Tag定位物体 1.先对物体定义标签Tag,可选已有或自定义 2.通过Tag名称找到对象 注意:如果标签对应多个对象,需使用获取对象集合再进行处理

  9. 关于ajax的短轮询问题

    利用前台的ajax不断向后台服务器请求,后台服务器不断查看数据库里的信息是否变化.若变化将信息返回前台,并执行一些操作 前台ajax代码 注意要加上cache这一项,如果是post请求的化,可以免了. ...

  10. windows 开机自动启动方案

    方案1: 把要启动的软件的快捷方式放到启动菜单对应的目录里,就像下面这个路径: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Sta ...