问题描述
http://acm.pku.edu.cn/JudgeOnline/problem?id=1386
这个题题意是给你一组单词,要判断是否能够构成一个
首尾相接的单词链,例如给出如下单词:
3acmmalformmouse就可以构成 acm->malform->mous的单词链。
问题分析
这种题实际上就是判断有向图的欧拉迹的存在性。
什么是欧拉迹?就是一个图的所有边在迹中出现且只出现一次。通俗的说就是每条边只走一次把整个图遍历完。
这里要用到一个数学结论:如果一个有向图存在闭的欧拉图,那么所有的顶点的入度和出度相等,并且有向图是联通的。
为了证明它,先证明引理。
引理:如果一个有向图所有的顶点的入度和出度相等,那么有向图的任意一条边都属于一个闭迹。
证明:若任意一条边l的顶点为X0,X1.则总能通过下面的方法构造一个闭迹O
1)将边l并入迹O
2)取迹O的最后一个点Xm,若Xm等于X0,算法结束。否则总能找到一条边Li从Xm连向Xm+1.
现在问题归结为,若要证明该引理,就要证明总能找到一条边Li从Xm连向Xm+1.在迹X0到Xm之间,Xm的入度刚好比出度多一个,而已知中有向图的入度和出度相等,那么总能找到一条边Li从Xm连向Xm+1.所以得证。
注意以上证明中没有用到有向图是联通的这一条。
下面证明有向图中欧拉闭迹的存在性的证明。
向图中欧拉闭迹的存在当且仅当所有的顶点的入度和出度相等,并且有向图是联通的。
证明:
必要性显然。
充分性:
可以按照下方法构造欧拉闭迹。
1)若图中没有边了,停止。
2)否则任取图中一条边,让它从Xm连向Xm+1,其中Xm是已经删除的闭迹的一个顶点,按照引理可以构造一个闭迹,将该闭迹从图中删除,转到1)。
因为图是联通的,一定能找到边从Xm连向Xm+1,这些一次删除的闭迹可以构造成一个欧拉迹。
代码