图论方面的题目,感觉都是比较基础的。除了08年的欧拉回路,考的最多的就是最小生成树的Prim或者Kruscal算法。大家在平时的训中
要注重《数据结构》中关于图论所涉及的基本算法,编熟了这些基本算法,感觉应付复试应该不成问题。
一,2005年 畅通工程(http://acm.hdu.edu.cn/showproblem.php?pid=1232)
其中要求的其实就是最小连通图的边数,一般就是最小生成树的边的个数(即:N个节点的最小生成树的边数为N-1)。根据给出的边情况,可能等价于先求出连通分量的个数M,所需的M-1条边最小生成树。
技巧:在同一个连通分量(集合)的节点对应的数组的值相同。合并集合,等于把他们对应的数组值设为相同即可。
二,2006年 还是畅通工程(http://acm.hdu.edu.cn/showproblem.php?pid=1233)
利用的是Kruscal算法,可以说是比较典型的求最小生成树的题目。使用了直接插入排序算法进行排序,技巧和上一个算法的相似,也是数组标记。
我一开始利用prime算法编写了一个,但放上去报错。至今没有找到错在哪里,下面贴上代码,希望有人能帮我看看。在此谢过了...
三,2007年 畅通工程(http://acm.hdu.edu.cn/showproblem.php?pid=1863)
还是一样的,没有被AC,但机子上运行是正确的。天哪~ 怎么办哟!老是这个问题...
四,2008年 欧拉回路(http://acm.hdu.edu.cn/showproblem.php?pid=1878)
此题是一道简单的图论题。判断一个图是否存在欧拉回路的充要条件是:1)每个点的度数为偶数,2)图是连通
定理的证明参照:http://zh.wikipedia.org/wiki/%E4%B8%80%E7%AC%94%E7%94%BB%E9%97%AE%E9%A2%98
粗略看了下给的答案解析,对于这道题的答案比较复杂。我的答案(数组的方法)虽然简单,但好像只能适用于无向图。以后做题的时候还得好好注意下!
五,2008年 继续畅通工程(http://acm.hdu.edu.cn/showproblem.php?pid=1879)
做这道题经历了三个阶段,总结了三条经验:
1)逻辑思维构想阶段:刚开始想得过于复杂,越想觉得这道题越难。后来再仔细看了看题目,换了个角度,其实可以直接令已建的路成本为0,加以考虑。
2)节省步骤,跳跃式节省运行时间:另它为0,再插入数组中。再加入处理,还不如直接将它视为连通就可以了。
3)利用STL,节省运行时间:前段时间对STL并不是非常重视,直到今天遇到这个问题才发现,它的排序效率和操作步骤是多么的节省时间。比我的直接插入排序要快的多,看来要好好学习一下了!(拼命捡呀...)
以下是被AC的代码。