LeetCode 207. Course Schedule(拓扑排序)

摘要:
也就是说,从x到y有一条有向边。问题解决方案:对于一个有向图,要找到是否有环,可以使用拓扑排序。拓扑排序是找到穿透度为0的顶点,然后删除它,降低相邻点的穿透度,然后找到穿透度0的点,直到所有顶点都被删除。如果有更改,则必须有一些点不能删除。

题目

题意:有n门课程,就是n个顶点,有m个对应关系:x,y,表示只有先上了y,才能上x。也就是x到y有一条有向边。问你求是否存在环。

题解:对于有向图求是否存在环,可以用拓扑排序,拓扑排序就是寻找入度为0的顶点,然后删去,并减少相邻点的入度,再寻找入度为0的点,直到所有顶点都删去,如果存在换,那么一定会有一些点是无法删除的。


class Solution {
public:
    
    vector<int> edge[10005];
    int a[10005];
    int b[10005];
    int vis[10005];
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        
        if(numCourses==0||numCourses==1)
            return true;
        
        if(prerequisites.size()==0)
            return true;
        
        for(int i=0;i<prerequisites.size();i++)
        {
            edge[prerequisites[i][1]].push_back(prerequisites[i][0]);
            a[prerequisites[i][0]]++;
            b[prerequisites[i][1]]++;
        }
        
        int num=0;
        while(1)
        {
            int tag=0;
            for(int i=0;i<numCourses;i++)
            {
                if(vis[i]==1)
                    continue;
                if(a[i]!=0)
                    continue;
                
                for(int j=0;j<edge[i].size();j++)
                {
                    a[edge[i][j]]--;
                }
                
                num++;
                tag=1;
                    
                vis[i]=1;
            }
            if(tag==0)
                break;
        }
        
        if(num != numCourses)
            return false;
        return true;
        
    }
};

免责声明:文章转载自《LeetCode 207. Course Schedule(拓扑排序)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx开启代理后,出现net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)错误jquery 给input text元素赋值,js修改表单的值下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

图论及其应用——图

我们探索某个领域的知识,无不怀揣的核弹级的好奇心与求知欲,那么,今天,我们就将开始对图论的探索。观察一副《机械迷城》的一处谜题。 不得不承认,《机械迷城》这款解密游戏难度远胜于《纪念碑谷》,其中一个困难点就在于——《纪念碑谷》的目标是很明确的,但是《机械迷城》往往需要自己凭感觉设立目标。而这里的关卡的目标,就是堵住第三个出水口。为了解决这个谜题,如果不去考...

Instrction Arrangement[hdu4109][拓扑排序+dp]

Instrction Arrangement(hdu4109)[拓扑排序+dp] Description 有n个指令m个要求 例如 X,Y,Z 代表 指令Y必须在指令X后Z秒执行 输出cpu运行的最小时间运行最小时间 也就是要满足最大的时间要求 input 输入由多个测试用例组成 第一行有两个整数 N,M (N <= 1000,M <= 100...