poj 1041(欧拉回路+输出字典序最小路径)
2014-05-26 18:04
211 查看
题目链接:http://poj.org/problem?id=1041
思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路。一个无向图存在欧拉回路的充要条件是每个顶点的度是偶数, 对于有向图存在欧拉回路的条件是每个顶点的出度等于入度(就是出去的边数等于进来的边数)。根据这个首先判断存在欧拉回路不, 如果存在然后用DFS去找欧拉回路。DFS的思想等效于先找一个环,然后对环上所有点递归DFS,并且把这些递归产生的路插入这个环中。 实际上程序实现起来很简单,递归完成后不需要单独做插入。
由于图已经保证连通,首先用度数是否是偶数,判断图是否是欧拉图,然后,输出最小升序,其实就是每次都从小往大的搜,先搜得一个最小序环,然后对环上的每一点进行搜索,其实对于欧拉图而言,每个点要么就只剩一个点,什么也搜不到了,要么还有一个环,只要把环上路径全都插入到对应位置上,用栈存路径,每次只有回溯到当前点,就是说当前点的后继都已经搜过了的时候,才把当前点入栈,这样一来倒着输出,就能得到一个欧拉回路,而且是最小升序。
http://paste.ubuntu.com/5992690/
思路:懒得写了,直接copy吧:对于一个图可以从一个顶点沿着边走下去,每个边只走一次,所有的边都经过后回到原点的路。一个无向图存在欧拉回路的充要条件是每个顶点的度是偶数, 对于有向图存在欧拉回路的条件是每个顶点的出度等于入度(就是出去的边数等于进来的边数)。根据这个首先判断存在欧拉回路不, 如果存在然后用DFS去找欧拉回路。DFS的思想等效于先找一个环,然后对环上所有点递归DFS,并且把这些递归产生的路插入这个环中。 实际上程序实现起来很简单,递归完成后不需要单独做插入。
由于图已经保证连通,首先用度数是否是偶数,判断图是否是欧拉图,然后,输出最小升序,其实就是每次都从小往大的搜,先搜得一个最小序环,然后对环上的每一点进行搜索,其实对于欧拉图而言,每个点要么就只剩一个点,什么也搜不到了,要么还有一个环,只要把环上路径全都插入到对应位置上,用栈存路径,每次只有回溯到当前点,就是说当前点的后继都已经搜过了的时候,才把当前点入栈,这样一来倒着输出,就能得到一个欧拉回路,而且是最小升序。
http://paste.ubuntu.com/5992690/
相关文章推荐
- poj 1041(欧拉回路+输出字典序最小路径)
- (POJ 1041)John's trip [无向欧拉图] 输出字典序最小的欧拉回路
- poj 2337 欧拉回路按照最小字典序输出+注意为了按最小字典序怎么处理邻接表
- POJ 1041 John's trip(欧拉回路+输出路径)
- POJ 1041 John's trip 无向图的【欧拉回路】路径输出
- poj 1041(字典序输出欧拉回路)
- poj1041 John's trip(欧拉回路+输出路径)
- POJ 1041 - John's trip 输出欧拉回路路径边..通用做法
- 欧拉回路输出路径 POJ - 1041
- poj1041 无向图欧拉回路 按最小升序输出
- POJ 1041 John's trip 欧拉回路(输出路径)
- poj 2337 欧拉回路输出最小字典序路径 ***
- poj 1041 John's trip (边最小字典序欧拉路径 Fleury)
- POJ 2337 - Catenyms 按所需的字典序输出欧拉路径..
- POJ 1734 Sightseeing trip(无向图最小环+输出路径)
- poj 1141 Brackets Sequence(区间DP,求最小,输出路径,较难)
- hdu 1814 Peaceful Commission (2-sat 输出字典序最小路径)
- poj 3715 最小覆盖集,并且输出字典序最小解
- 二分图最大匹配 输出字典序最小的方案 poj 3715
- POJ 1780 - Code 非递归..输出欧拉回路边路径..