题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系。
由DAG图节点的偏序关系确定节点的排序可以由拓扑排序求出。而确定这些问题也可以由拓扑排序完成。
我们知道拓扑排序的过程是:
1.每次从队列中找出1个入度为0的点作为当前排序的点(加入到已排序的集合中)
2.从图中删除以这个点为起点的弧(即使所有的终点入度减1)
3.如果找不到入度为0的点则退出过程
那么我们来看拓扑排序的过程中怎么判断这几个问题:
1.如果某次找入度为0的点时有多个入度为0的点,则无法确定关系;
2.如果找不到入度为0的点退出过程,但是并不是所有的点都已经确定排序,则图中一定有环,即关系是矛盾的。
题目还隐形地要求判断矛盾在无法确定关系之前,所以我笨拙地用了两次拓扑排序,第一次确定是否矛盾,第二次再判断能否确定关系。
#include
#include
#include
#include
#include
#include
#include
#include
#include