您的位置:首页 > 其它

207. Course Schedule LeetCode

2016-03-16 15:09 274 查看
题意:有n门课,给出所有课的先修课程,问能不能按照一个顺序把所有课上完。

题解:典型的拓扑排序。

class Solution {
public:
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
bool g[numCourses+1][numCourses+1];
int d[numCourses+1];
bool vis[numCourses+1];
memset(g,false,sizeof(g));
memset(d,0,sizeof(d));
memset(vis,false,sizeof(vis));
for(int i = 0; i < prerequisites.size(); i++)
{
int u = prerequisites[i].first;
int v = prerequisites[i].second;
if(!g[v][u])
g[v][u] = true,d[u]++;
}
queue<int> q;
while(!q.empty()) q.pop();
for(int i = 0; i < numCourses; i++)
if(!d[i])
q.push(i),vis[i] = true;
while(!q.empty())
{
int now = q.front();
q.pop();
for(int i = 0; i < numCourses; i++)
{
if(g[now][i]) d[i]--;
if(!vis[i] && !d[i]) q.push(i),vis[i] = true;;
}
}
for(int i = 0; i < numCourses; i++)
if(d[i]) return false;
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode