一道关于图的面试题

最近一直在做一个build system的依赖管理,感觉其中某些内容可以抽取出来,作为一道很不错的面试题:

假设你在同时编译n个项目,他们相互之间有依赖关系,比如:

现在,让你写一个算法,把每个项目的依赖拍平:即把其所有间接依赖+直接依赖的项目都输出。
比如上面这个图的输出就为:
a: b c d e f g
b: c d
c: d
d:
e: f g
f: g
g:
 
然后,还可以有后续的问题:
  1. 如果有环,如何判断并输出环?
  2. 如果这些项目有可能有一些外部的依赖,请改变你的算法以适合这种情况。
好,面试到此结束。
 
下面是个扩展题,没在工作中做到,但后来想了下,觉得挺有意思:
  1. 为了提高编译速度,现在需要找出那些可以并行编译的项目,请改进算法实现之。
posted @ 2012-12-07 20:45  lzprgmr  阅读(685)  评论(0编辑  收藏  举报

黄将军