LeetCode-210-课程表II-C语言

    xiaoxiao2022-07-02  192

    /* * 算法思想: * 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; }
    最新回复(0)