1.在基本算法的框架下实现的Toposort排序采用的是贪心的思想,即我们输出的一组解是按照字典序排好的,当然如果我们改变判断结点入度的顺序也同样可以当作字典序的逆序排列,POJ 3687就是一个简单的toposort,不过这道题目BUG很诡异,正确理解题意便能迅速秒杀这道题目。
2.要想得到所有的toposort就得使用递归的算法思想。递归过程中只需要注意的递归的层数就可以了,同时要注意判断入度为零的点的处理。POJ 1270就是这样一道题目。
3.POJ 1094是一道练习Toposort的好题目,这道题目中我们顺便采用了Floyd()算法来判断图中是否存在环。当然这道题目的处理和其他toposort的题目不同之处在于我们是一边输入,一边判断toposort,当出现环时,终止就可以了。那么如何判断该toposort是否唯一呢?方法也很简单,只在和这个起点(进行搜索的顶点)相邻的点里面进行toposort就可以了;
4.当然有的时候我们知道,当顶点的个数达到10000的时候,使用二维数组表示边和点的关系显然是不合适的,这时候我们只能通过指针来实现(在ACM竞赛里,受于内存限制)此时就需要熟练的使用邻接表来存储图。这样的题目在ACM里面是很多的,例如HDU 2647.
5.关于toposort的综合题目,其实也不能说是综合题目了,只是说这些问题都不容易看出来能够使用toposort来解决。这里有一道很不错的例题:POJ 1128 & ZOJ 1083.