安利一篇比较写的比较好的的博客...

拓扑排序的原理及其实现

我本来以为我看懂了原理就会打了,没想到因为没有手动实践过...原理实际上也没记清楚....

一题HDU的拓扑裸题HDU 3342

我的拓扑排序是直接用栈实现的....手动模拟链表玩栈简直....我看博文也看了一会才看懂...不过有STL在打题的时候明显提高代码效率丫...

#include<iostream>
#include<vector>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
vector<int>head[105];
int M,N;
int d[105];
bool toposort()
{
stack<int>sta;
bool vis[105] = {false};
for (int i = 0; i < N; i++)//入度为0
{
if (!vis[i] && d[i] == 0)
{
vis[i] = true;
sta.push(i);
}
}
while(!sta.empty())
{ int nod = sta.top();
sta.pop(); for(int i = 0; i < head[nod].size(); i++)
{
int u = head[nod][i];//将前驱为0的节点,对应的边去掉,对应点的入度减一
d[u]--;
}
for (int i = 0; i < N; i++)
{
if (!vis[i] && d[i] == 0)
{
vis[i] = true;
sta.push(i);
}
}
}
for(int i = 0; i < N; i++)//查看是否有回路
{
if(!vis[i]) return false;
}
return true;
}
int main()
{
while(scanf("%d %d",&N,&M),M||N)
{
memset(d,0,sizeof(d));
for(int i = 0; i < N+1; i++) head[i].clear(); for(int i = 0; i < M; i++)
{
int a,b;
scanf("%d %d",&a,&b);
d[b]++;
head[a].push_back(b);
}
if(toposort()) printf("YES\n");
else printf("NO\n");
}
}

C++拓扑排序的更多相关文章

  1. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  2. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  3. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  4. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  5. 图——拓扑排序(uva10305)

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

  6. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  7. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

  8. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  9. *HDU1285 拓扑排序

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. 拓扑排序&&欧拉(回)路

    摘要:最近是不适合写代码么?忘记初始化wa到死<_=_=_>.唔--最近在学习图论,从基础搞起,先搞了拓扑排序和欧拉(回)路. Part 0. 拓扑排序 ==挖坑== Part 1. 欧拉 ...

随机推荐

  1. 【英语】Bingo口语笔记(15) - Give系列

  2. [转载] FFmpeg API 变更记录

    最近一两年内FFmpeg项目发展的速度很快,本来是一件好事.但是随之而来的问题就是其API(接口函数)一直在发生变动.这么一来基于旧一点版本的FFmpeg的程序的代码在最新的类库上可能就跑不通了. 例 ...

  3. 【转】eclipse安装shell编辑插件shellEd

    原文网址:http://blog.csdn.net/just_lion/article/details/7764777 1. 安装man page viewer Help->Install Ne ...

  4. OpenGL ES之GLSurfaceView学习一:介绍

    原文地址::http://120.132.134.205/cmdn/supesite/?uid-5358-action-viewspace-itemid-6527 GLSurfaceView是一个视图 ...

  5. 树莓派 安装 php

    执行如下命令(注意红色字部分是关键!) sudo apt-get install apache2 php5 libapache2-mod-php5 然后把网页文件复制到 /usr/www 中即可 参考 ...

  6. uglifyjs使用

    1.安装Nodejs:去这里下载并安装. 2.打开cmd,运行npm,node应该会有输出东西 3.如果在window上运行Node.js的npm报Error: ENOENT, stat 'C:\Us ...

  7. Android无法调用JS的问题解决

    1.启用JS webView.getSettings().setJavaScriptEnabled(true); 2.需要使用WebChromeClient(如果没有这个Client,很多东西不会响应 ...

  8. Checked Exception与Runtime Exception 的区别

    Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首 ...

  9. 高手就用Chrome不安全模式

    背景:最近玩CSS3和HTML玩得不可开交. 既然要用浏览器的话,就最好在浏览器中设置一个主页,以前徒简洁就一直用百度的搜索页做主页,但是现在百度邪恶的各种广告实在让我恶心,而且一些文献资料中国网站上 ...

  10. 安卓 开发 The connection to adb is down, and a severe error has occured.

    The connection to adb is down, and a severe error has occured.问题解决 其原因就是其他进程占用了  ADB的端口,所以无法启动 遇到问题描 ...