Leetcode 207 课程表

思路:拓扑排序,判断无环

1.建立二维数组record[ ][ ] ,记录每个顶点的相邻点

2.Hash[ ]记录每个顶点的入度

3.将入度=0的点进栈

4.每次出栈一个点x,把record[x]行所有点的入度-1,产生入度=0的点则进栈

5.重复4直至栈为空

6.遍历Hash[ ],若每个元素都是0,则无环,否则有环。

tip:因为要自己建模,所以建立二维数组记录比较方便(这里在邻接矩阵的基础上作了修改,只记录可达点,从而减少时间消耗),不建议写邻接表,建立过程比较繁琐。

代码:

class Solution {

public:
    bool canFinish(int numCourses, vector>& prerequisites) {
        vector> record(numCourses);//存储每个节点相邻的边
        
        int Hash[10010];//记录入度
        memset(Hash,0,sizeof(Hash));
        
        //初始化二维数组,记录可达关系
        for(int i=0;i tmp=prerequisites[i];
            int x=tmp.first;
            int y=tmp.second;
            record[y].push_back(x);  
            Hash[x]++;
        }
        //0度入栈
        stack s;
        for(int i=0;i

 

你可能感兴趣的:(Leetcode)