一道笔试程序设计题
2009-11-27 00:51
211 查看
一道笔试程序设计题
有一个无向图,写一个函数判断图中是否存在回路。函数原型如下:
int ring(int[][] array, int n, int k)
n为图中的顶点数,k为图中的边数,array其实是一个k行2列的二维数组,其中的元素比如(0,1)表示顶点0和顶点1之间存在边。
图中如果存在回路,函数返回1,否则返回0。
不知哪位大牛给高效地实现一下。
posted on 2009-05-06 22:29 蒋耘 阅读(2372) 评论(3) 编辑 收藏 所属分类: 求职
评论
图论中有个定理,如果边数m >= 顶点数n,则必定存在回路否则,m<n时,就要写程序判断了。
如果有环路,则存在一个子图,构成一条回路,回路上的每个节点的度数>=2,所以,凡是度数<2的
顶点和该回路不搭界,可以迭代地去掉他们。
算法如下:
V = vertex set
E = edge set
设原图为G
初始化V = {G中所有度数小于2的顶点}
定义E(V) 为 与V中的顶点相关的边
while V is not empty
v = Next(V)
delete v and E(v) from G
update G;//改变和v点相连的顶点的度数
将所有去掉v后度数变成<2的顶点加入V
end while
if G if empty
没有回路
else
有回路
具体实现时,V可以是队列
这个算法的复杂度是O(n+m),n是顶点个数,m是边个数,m<n,所以复杂度是O(n)
# re: 一道笔试程序设计题 2009-05-07 17:39 gaofeng
相关文章推荐
- 记一道很蛋疼的笔试题
- 一道JAVA笔试编程题
- 一道Shell笔试题解答
- 阿里_一道备受关注的前端开发笔试题
- 一道C++的笔试题
- 一道笔试题
- 一道简单又不简单的算法笔试题
- 分享一道笔试题
- 一道蛮好玩的题目——某顶尖游戏公司程序员笔试第一题(摔xbox)
- 由阿里一道笔试题引发的思考/ String
- 一道菜鸟笔试题
- 一道笔试题
- 这周的一道程序设计题兼sicily1443 Printer Queue题解
- 一道经常出现的字符串内存地址问题的笔试题
- 某知名IT公司最近的一道笔试编程题
- C#笔试(程序设计)
- 一道多线程笔试题目的联想
- 没用的程序设计题-美甲帮笔试题
- 据说是一道百度的笔试题
- 博彦科技软件测试工程师一道C笔试题