拓扑排序算法

/*
 
*输入pTask为装有Task结构体的数组
 
*算法存在的Bug 当输入的Task的child数组中存在自己的ID 运行失败
 
*/

struct Task{ int ID; int *child; //装有其前驱Task的ID的数组 int child_num; }; void completeMission(Task *pTask,int Task_num) { int i,j; Task *pt for( i=0;i<Task_num;i++) { if((pTask+i)->child_num==0) push(stack,*(pTask+i)); } while(!stack.empty()) { pt=pop(stack); doTask(pt->ID); waitTask();      for(i=0;i<Task_num;i++) { int num=(pTask+i)->child_num for(j=0;j<num;j++)         {             if(*((pTask+i)->child +j)==pt->ID)             { (pTask+i)->child_num--; if((pTask+i)->child_num==0) push(stack,*(pTask+i));             }         }      } } }

 

posted on 2012-07-12 10:22  as_  阅读(735)  评论(0编辑  收藏  举报

导航