百度2010校招算法题之编译模块

算法设计

某大型项目由n个组件N1,
N2……Nn构成,每个组件都可以独立编译,但是某些组件的编译依赖于其它组件(即某些组件只能在其它组件编译完成后才能编译),设计算法给出统计过程。

 思路:拓扑排序算法

语言伪代码:

(1)初始化栈S
(2)找出所有可执行的组件w,w进栈
(3)while(栈S非空)
       v=栈顶元素出栈;
       if(v未被编译) 
              编译v,并且输出v;
       foreach(更新与v相关的组件依赖参数)
             if(x=组件可被编译) 
                  x进栈;

C伪码:

void compileModel(Model *model)
{
     Model *w,*v;
     Initial(Stack);

     while(i<n)
        if(model[i].depend==0)         //其所依赖模块数为0
             push(stack,model[i]);     //进栈

    while(!Stack.empty())             
     {
        v=pop(Stack);
        if(v not copmpiled)
           compile(v),printf(v);    //编译模块并输出结果
        while(v.related model w)      //取出依赖v的模块w
        {
           renew(w);                  //更新模块w参数,使其依赖的模块数目减一
           if(w.depend==0)            //所依赖模块数目为0
                push(stack,w);        //进栈
         }
      }
}
原文地址:https://www.cnblogs.com/biyeymyhjob/p/2597208.html