Toplogical Sort
拓扑排序是对有向图的顶点的一种排序,它使得如果存在一条从Vm到Vn的路径,那么在排序中Vn出现在Vm后面。
如果图含有圈,或者初始入度没有为0的节点,那么拓扑排序是不可能完成的。
理论介绍去看或者《算法导论》,老话,这里还是介绍如何实现。
tls.h
/***********************...
分类:
编程语言 时间:
2014-11-25 14:33:51
阅读次数:
265
Rank of Tetris
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5447 Accepted Submission(s): 1526
Problem Description
自从Lele开发了Ra...
分类:
编程语言 时间:
2014-11-24 22:30:55
阅读次数:
337
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#defineMAX_VERTEX_NUM11//顶点的最大数
#defineINFINITY32768
#defineError0
#defineOK1
typedefenum{DG,DN,UDG,UDN}GraphKind;//图的种类G表示有向图,DN表示有向网,UDG表示无向图,UDN表示无向网
typedefcharVert..
分类:
编程语言 时间:
2014-11-23 16:05:54
阅读次数:
174
题目大意:
用N份工作,M组关系,例如关系A,B表示要先完成B,才能完成A,让你输出一组工作完成的顺序。
解题思路:
拓扑排序。...
分类:
编程语言 时间:
2014-11-22 17:36:41
阅读次数:
163
package Algorithms;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Stack;
public class Graphic {
public static class Vertex{
...
分类:
编程语言 时间:
2014-11-22 13:26:10
阅读次数:
261
题意:
给出一些正方形,这些正方形的每一条边都有一个标号,这些标号有两种形式:1.一个大写字母+一个加减号(如:A+, B-, A-......), 2.两个0(如:00);这些正方形可以随意翻转和旋转,当两个正方形通过旋转或翻转,使得他们的公共边为相同大写字母并且符号相反时,他们就可以彼此结合拼在一起,现在给出n中正方形,每种正方形有无限多种,问这些正方形能否拼成一个无限大的结构。
题解:
...
分类:
编程语言 时间:
2014-11-19 18:44:55
阅读次数:
170
算法分析:
本题是拓扑排序的典型应用。
由于顶点数量不多,可以采用邻接矩阵来存储图信息,这样算法比较简单,只需要搜索n次,每次把序号最小的入度为0的顶点存储到拓扑序列中就行了。算法思路比较清晰,代码也比较简洁,但时间复杂度和空间复杂度都较高。
另一种方法是采用邻接表存储图信息。由于题目要求输出时编号小的队伍在前,所以在入栈时一定要保证先让序号最小的入度为0的顶点在栈顶,这样根据后进先出的特点,可以把序号最小的顶点存储到拓扑序列中。我采用折半插入排序的方法,把入度为0的顶点按递减序排序,然后对图进行深度优先...
分类:
其他好文 时间:
2014-11-19 16:05:59
阅读次数:
174
hihocoder上的这一篇文章写得特别赞!很好理解。
“在我介绍别的算法之前,你先来讲一讲你是准备如何使用线段树来解决这个问题的吧?”小Hi虽然做好了讲解的准备,但是还是希望能够一步步引导小Ho进行思考,于是这般说道。
“唔……那我先从线段树的定义说起吧:线段树其实本质就是用一棵树来维护一段区间上和某个子区间相关的值——例如区间和、区间最大最小值一类的。”小Ho说道:“它的具体做...
分类:
其他好文 时间:
2014-11-19 11:29:50
阅读次数:
232
图结构练习——判断给定图是否存在合法拓扑序列
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个有向图,判断该有向图是否存在一个合法的拓扑序列。
输入
输入包含多组,每组格式如下。
第一行包含两个整数n,m,分别代表该有向图的顶点数和边数。(n
后面m行每行两个整数a b,表示从a到b有一...
分类:
编程语言 时间:
2014-11-19 11:26:00
阅读次数:
230
采用深度优先搜索进行拓扑排序,获取拓扑序列的同时计算各顶点事件的最早发生时间,然后逆序计算各顶点事件的最晚发生时间。
本文是《大话数据结构》的读书笔记,在输出关键路径时采用深度优先搜索输出关键路径,能输出多条关键路径。...
分类:
编程语言 时间:
2014-11-19 11:20:41
阅读次数:
260