算法设计
某大型项目由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); //进栈 } } }