LeetCode 207. 课程表
class Solution {
public:
bool canFinish(int n, vector<vector<int>>& pre) {
if(pre.empty()||pre[0].empty()) return true;
vector<vector<bool>> g(n,vector<bool>(n,false));
for(auto q:pre)
g[q[0]][q[1]]=true;
vector<int> st(n,false);
//0表示未进入递归,1表示可以修读,2表示不能修读
for(int i=0;i<n;i++)
{
if(!st[i]&&!dfs(i,st,n,g))
return false;
else if(st[i]==2) return false;
}
return true;
}
bool dfs(int num,vector<int>& st,int n,vector<vector<bool>> &g)//尝试修第num门课
{
if(st[num]==2) return false;
if(st[num]==1) return true;
//如果进入过递归,直接返回答案
st[num]=2;
for(int i=0;i<n;i++)
if(g[num][i])//遍历所有先修课程
{
if(i==num)//如果先修课程包含自己,直接返回false
{
st[num]=2;
return false;
}
if(!dfs(i,st,n,g))
return false;
}
st[num]=1;
return true;
}
};
有帮助的话可以点个赞,我会很开心的~
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~