/*
* 算法思想:
* dfs方法解决拓扑排序问题
*
*
*/
bool rec(int num, int **parr, int pnum, int *vst, int index, int *stack, int *stack_index){
if(vst[index] == 1)
return true;
if(vst[index] == -1){
return false;
}
vst[index] = 1;
for(int i=0; i<pnum; i++){
if(parr[i][0] != index)
continue;
if(rec(num, parr, pnum, vst, parr[i][1], stack, stack_index))
return true;
}
vst[index] = -1;
stack[(*stack_index)++] = index;
// printf("stack_index = %d \n", *stack_index);
return false;
}
int* findOrder(int numCourses, int** parr, int pnum, int* prerequisitesColSize, int* returnSize){
int vst[numCourses];
int *ret = (int *)malloc(sizeof(int) * numCourses);
int ret_index = 0;
memset(vst, 0, sizeof(vst));
for(int i=0; i<numCourses; i++){
if(rec(numCourses, parr, pnum, vst, i, ret, &ret_index)){
*returnSize = 0;
free(ret);
return NULL;
}
}
if(ret_index != numCourses){
*returnSize = 0;
return ret;
}
*returnSize = ret_index;
return ret;
}
LeetCode-210-课程表II-C语言
最新推荐文章于 2022-06-08 18:01:55 发布