图(三色标记法,初概念)

//颜色染色法

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>>g(numCourses);
        for(auto&q:prerequisites){
			g[q[0]].push_back(q[1]);
		}
		vector<int>color(numCourses,0);
		//0表示未访问,1表示正在访问,2表示访问结束
		auto dfs=[&](this auto&&dfs,int x)->bool{
			color[x]=1;
			for(auto&p:g[x]){
				if(color[p]==1||color[p]==0&&dfs(p)){
					return true;
				}
			}
			color[x]=2;
			return false;
		};
		for(int i=0;i<numCourses;i++){
			if(dfs(i)) return false;
		}
		return true;
    }
};

//拓扑排序(kahn算法)

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
           vector<vector<int>>e(numCourses);
        vector<int>din(numCourses);//入度
        for(auto&q:prerequisites){
			e[q[1]].push_back(q[0]);//邻接表
		    din[q[0]]++;
        }
        queue<int>tp;
        for(int i=0;i<numCourses;i++){
            if(din[i]==0) tp.push(i);
        }
        int ans=0;
        while(!tp.empty()){
            int x=tp.front();
            tp.pop();
            ans++;
            for(auto&q:e[x]){
                if(--din[q]==0){
                    tp.push(q);
                }
            }
        }
        return ans==numCourses;
    }
};
posted @   Qacter  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示