pku openjudge 拓扑排序
2013-12-20 16:25
295 查看
http://dsa.openjudge.cn/graph/0719/
0719:拓扑排序
查看提交
统计
提问
总时间限制: 10000ms 内存限制: 1000kB
描述
给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前
输入若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有2个数,分别是该条弧所关联的两个顶点编号输出若干个空格隔开的顶点构成的序列(用小写字母)样例输入
6 8 1 2 1 3 1 4 3 2 3 5 4 5 6 4 6 5
样例输出
v1 v3 v2 v6 v4 v5
查看
提交
统计
提问
//北大数算课程上主要讲的拓扑排序使用邻接链表实现的,但如果空间要求没有非常高,邻接矩阵的表示方法依然是一个不错的选择
//为了节省很时间不去每次都把矩阵遍历一遍,用一个一位数组记录一个点的入度,每次按顺序找到一个入读为0的点,将入读修改为-1,并且修改以这个点为起始点的终点的入读和并清零矩阵上表示这条边的元素 再从头进行判断,直到找不到一个入读为0的点为止,为什么从头进行判断,这会费一些时间 ,不过能够更方便的满足小的节点在前面输出的条件
#include<iostream> #include<stdio.h> #include<cstring> using namespace std; #define maxn 500 bool data[maxn][maxn]; int ind[maxn]; int v,a; int main() { int s,d; memset(data,0,sizeof(data)); memset(ind,0,sizeof(ind)); scanf("%d%d",&v,&a); for(int i=0;i<a;i++) { scanf("%d%d",&s,&d); data[s][d]=1; ind[d]++; } for(int i=1;i<=v;i++) { if(ind[i]==0) { printf("v%d ",i); ind[i]--; for(int j=1;j<=v;j++) { if(data[i][j]) { data[i][j]=0; ind[j]--; } } i=0; } } return 0; }
相关文章推荐
- Linux下运行jar程序
- [Linux] 文件时间属性及touch命令
- linux shell之天干地支算法-干支日计算
- linux之shell编程笔记
- (转+原创)BASH启动脚本及其启动顺序
- 做运维需要大心脏
- 很好的一篇描述docker的文章
- <Android+敏捷>:架构设计与代码造形
- iwebshop 与 ecshop 哪个适合二次开发?
- Hadoop HIPI
- linux进程间内存共享和信号量协作[基于哈工大操作系统实验]
- opencv利用鼠标获取像素值
- 一台主机多个tomcat
- tomcat+花生壳
- 用自己电脑做网站服务器-PHPStudy+花生壳
- topcoder 刷题笔录 初级篇(一)
- 免费域名--花生壳绑定tomcat 花生壳路由器的设置
- Typecho安装在根目录下与子目录的区别
- NSRunLoop浅析
- linux的用户和用户组