传送门: 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. learning english

    distortion 英[dɪ'stɔ:ʃn] 美[dɪˈstɔrʃən]n. 扭曲,变形; 失真,畸变; [心理学] 扭转;[例句]I think it would be a gross disto ...

  2. 如何写兼容浏览器和Node.js环境的Javascript代码

    如果有打开过jQuery的源码(从1.11及以后),或者Vue.js.React.js的源码,都会在文件的前面看见这样一段代码: ( function( global, factory ) { &qu ...

  3. es5 数组

    一. 数组申明 var a = new Array(5)  会生成一个长度为5 每个元素都是undifined的数组 var a = new Array(1,2,3) 跟 var a = [1,2,3 ...

  4. svn问题(队列)

    svn执行clean up命令时报错"Previous operation has not finished; run 'cleanup' if it was interrupted&quo ...

  5. C# 显式创建线程 or 使用线程池线程--new Thread() or ThreadPool.QueueUserWorkItem()

    在C#多线程编程中,关于是使用自己创建的线程(Thread)还是使用线程池(ThreadPool)线程,一直很困惑,知道看了Jeffrey Richter的相关介绍才明白,记录如下: 当满足一下任何条 ...

  6. js splice比较好用的方法

    http://www.w3school.com.cn/jsref/jsref_splice.asp从w3c看到这个方法,感觉不错,记录一下.

  7. 如何运用xp_cmdshell 执行多行cmd命令

    因为需要利用sql  脚本调用外部程序,所以尝试xp_cmdshell 命令,发现其默认只能执行一行命令,最后找到了下面方法: 将多行cmd 命令处理成bat文件,然后直接利用所在路径+文件来执行: ...

  8. Linux安装Firefly

    1.安装一些必要的东东 yum install -y gcc zlib zlib-devel lrzsz openssl openssl-devel python-devel mysql-devel ...

  9. FTP上传下载工具(FlashFXP) v5.5.0 中文版

    软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...

  10. 博客搬到CSDN了,以后就老实的呆在这儿吧~~

    几年前读书的时候就自己在做独立的个人博客网站,重做 + 改版好多次,域名也换了好几个- 163fly.com.godbz.com.zhouz.me ... 都是我曾经用过的域名,都放弃了- 发现到头来 ...