topo排序 + 用邻接表优化后的



输入数据:
4 6
1 2
1 3
2 3
3 4
2 4
4 2
4 6
1 2
1 3
2 3
3 4
2 4
1 2
topo排序为偏序:
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int indegree[] ;
queue<int>q;
int n , m ;
bool map[][] ;
int a[] ;
int topo(int n)
{
int cnt = ;
while (!q.empty ())
q.pop () ; for(int i = ; i <= n ; i++) {
if (indegree[i] == ) {
q.push(i);//入度为0的点为起始点
}
} int temp ;
while(!q.empty()) {
temp = q.front();
a[cnt ++] = temp ;
q.pop();
for(int i = ; i <= n ; i++) {
if(map[temp][i]) {
indegree[i]--;
if(indegree[i] == )
q.push(i);
}
}
}
if (cnt == n) //当输出的顶点数小于图中的顶点数时,输出有回路信息
for (int i = ; i < n ; i++) {
printf ("%d----->" , a[i]) ;
}
else
puts ("The network has a cycle!") ;
} int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int u , v ;
while (~ scanf ("%d%d" , &n , &m)) {
memset (indegree , , sizeof(indegree)) ;
memset (map , , sizeof(map)) ;
for (int i = ; i < m ; i++) {
scanf ("%d%d" , &u , &v) ;
if (!map[u][v])//在u 和 v 没有连通时
indegree[v]++ ;//点v的入度++
map[u][v] = ;//表示连通
}
topo (n) ;
}
}
演示:http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/topological_sort.asp
详细:http://blog.csdn.net/dm_vincent/article/details/7714519
-----------------hash table------------------------------------
struct Hash
{
int nxt ;
ll w ;
Hash () {}
Hash (int nxt , ll w) : nxt (nxt) , w (w) {}
}e[M];
int H[M] , E ; void init ()
{
E = ;
memset (H , , sizeof(H) ) ;
} void Insert (ll x)
{
int y = x % M ;
if (y < ) y += M ;
e[E ++] = (H[y] , x) ;
H[y] = E ;
} bool Find (ll x)
{
int y = x % M ;
if (y < ) y += M ;
for (int i = H[y] ; i ; i = e[i].nxt) {
if (e[i].w == x) return true ;
}
return false ;
}
------------------邻接表--------------------------------------------------------
struct edge
{
int u , v , w , nxt ;
edge () {}
edge (int u , int v , int w , int nxt) : u (u) , v (v) , w (w) , nxt (nxt) {}
}e[M];
int H[M] , E ;
void init ()
{
memset (H , , sizeof(H) ) ;
E = ;
} void addedge ()
{
e[E ] = edge (u , v , w , H[u]) ;
H[u] = E ++;
e[E ] = edge (v , u , w , H[v]) ;
H[v] = E ++;
}
用邻接表优化后的。时间,空间复杂度都降为O(N)
topo排序 + 用邻接表优化后的的更多相关文章
- 【数据结构】【图文】【oj习题】 图的拓扑排序(邻接表)
拓扑排序: 按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系,由此所得顶点的线性序列称之为拓扑有序序列.显然对于有回路的有向图得不 ...
- POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...
- poj2002 hash+邻接表优化Squares
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 17487 Accepted: 6643 Descript ...
- hdu.5195.DZY Loves Topological Sorting(topo排序 && 贪心)
DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 ...
- ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...
- POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化
昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...
- hdu 2647 (拓扑排序 邻接表建图的模板) Reward
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...
- 图论——最小生成树prim+邻接表+堆优化
今天学长对比了最小生成树最快速的求法不管是稠密图还是稀疏图,prim+邻接表+堆优化都能得到一个很不错的速度,所以参考学长的代码打出了下列代码,make_pair还不是很会,大体理解的意思是可以同时绑 ...
- HUST 1103 校赛 邻接表-拓扑排序
Description N students were invited to attend a party, every student has some friends, only if someo ...
随机推荐
- 两个简单的Loading
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<JavaScript并非"按值传递"> 作者主页:myvin 博主QQ:85139 ...
- Unity3D独立游戏开发日记(二):摆放建筑物
在沙盒游戏里,能自由建造是很重要的特点,比如说风靡全球的<我的世界>,用一个个方块就能搭建出规模宏大的世界.甚至有偏激的人说,没有自由建造,就不是一个真正的沙盒游戏.的确,沙盒游戏的魅力有 ...
- Java技术路线图
在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样我们清楚的知道我们大概处于那个阶段和水平. Java程序员 高级特性 反射.泛型. ...
- α发布后的感想(组长作业)
今天α发布后,组长作业,谈谈心得体会,谈谈哪些做的好的地方,哪些做的不好.耐撕团队组长因有事缺席,耐撕团队的α发布由齐同学来主持,所以这个作业由齐同学代理. 先谈谈耐撕团队在α发布会中齐同学认为做的好 ...
- [Windows 64] (搬运)价值¥ 6,499的软件Navicat Premium11.2.11 最新版及其注册机
Navicat Premium可以连接6种数据库并开发> 转载于:http://www.52pojie.cn/thread-529020-1-1.html
- zabbix修改密码
在我们刚刚安装好zabbix之后我们的管理用户是 Admin,密码是zabbix 所以我们肯定是要更改密码的,这个方法也适用于我们忘记管理员密码 首先我们登录mysql数据库 这里有一个zabbix库 ...
- BZOJ-1024 生日快乐 DFS+一丝sb的数学思考
1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1948 Solved: 1391 [Submit][Statu ...
- BZOJ3732 Network
Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...
- #error和#line实例
1.#include <stdio.h>#define CONST_NAME1 "CONST_NAME1"#define CONST_NAME2 "CONST ...
- Eclipse在线安装ADT插件
要想使用Eclipse开发Android应用,首先要安装一个ADT插件,在此记录一下在Eclipse中采用在线安装的方式ADT插件,我使用的Eclipse版本是:eclipse-jee-luna-SR ...