zoukankan      html  css  js  c++  java
  • LeetCode 207. Course Schedule(拓扑排序)

    题目

    题意:有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;
            
        }
    };
    
  • 相关阅读:
    MATLAB accumarray
    函数rand,randn,randi
    bsxfun
    sub2ind函数
    MAX
    & 和 &&
    matlab函数int2str, num2str, str2num
    ASCII对照表
    STM32的ADC配置
    单节锂电池基本知识
  • 原文地址:https://www.cnblogs.com/dacc123/p/12306344.html
Copyright © 2011-2022 走看看