您的位置:首页 > 其它

[LeetCode]Course Schedule

2015-07-24 16:05 411 查看
解题思路:
拓扑排序,判断 有向图中是否存在 环。
BFS和DFS都可以实现,解释可以参考 /article/9865291.html

这里之所以要记录一下,是因为用到了C++11的新的语法特性 : auto,自动检测变量类型

//原来:
vector<pair<int, int> >::iterator it = prerequisites.begin();
//现在:
auto it = prerequisites.begin();

class Solution {
public:
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> inDegrees(numCourses, 0);
auto it = prerequisites.begin();
while(it != prerequisites.end()){
inDegrees[it->first] ++;
it ++;
}

queue<int> zeroIndegreeArray;
// for (int i = 0 ; i < inDegrees.size(); ++i){
//     if (inDegrees[i] == 0)
//         zeroIndegreeArray.push(i);
// }

for (auto i = 0 : inDegrees.size()){
if (inDegrees[i] == 0)
zeroIndegreeArray.push(i);
}

while(!zeroIndegreeArray.empty()){
int id = zeroIndegreeArray.front();
zeroIndegreeArray.pop();

it = prerequisites.begin();
while(it != prerequisites.end()){

if (it->second == id){

int vex = it->first;
it = prerequisites.erase(it);
--inDegrees[vex];
if (inDegrees[vex] == 0){
zeroIndegreeArray.push(vex);
}
}else{
it ++;
}
}
}
if (prerequisites.size() != 0) return false;

return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: