Course Schedule I的延伸,这次要排出课程顺序。
有大概想到去找node的顺序跟课程顺序有关,结果发现DFS离开结束点的顺序颠倒过来,就是这题要的output~所以用个vector纪录就行了。
c++要回传空阵列时,用大括号。
return {}; //correct
return [];
想把vector的el顺序颠倒,可以用reverse(),加一行程序,vectorname的顺序就颠倒了
for(auto el, vectorname)
cout << el << " ";
reverse(vectorname.begin(), vectorname.end();
for(auto el, vectorname)
cout << el << " ";
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
vector<vector<int>> adjlist(numCourses);
for(auto el: prerequisites) {
adjlist[el[1]].push_back(el[0]);
}
vector<bool> discover(numCourses, false), finish(numCourses, false);
vector<int> q;
for(int i = 0; i < numCourses; i++)
if(!finish[i])
if(cyclic(adjlist, discover, finish, i, q))
return {};
reverse(q.begin(), q.end());
return q;
}
private:
bool cyclic(vector<vector<int>>& adjlist, vector<bool>& discover, vector<bool>& finish, int curr_node, vector<int>& q) {
if (discover[curr_node])
return true;
if (finish[curr_node])
return false;
discover[curr_node] = true;
for(auto el: adjlist[curr_node]) {
if(cyclic(adjlist, discover, finish, el, q))
return {};
}
discover[curr_node] = false; finish[curr_node] = true;
q.push_back(curr_node);
return false;
}
};
重打一次昨天的cyclic()时,一直跑出error type-ed: cannot have a name
的错误,後来发现是我adjlist的宣告型态少打一个角括号<
赚到一天耶
参考:
https://web.ntnu.edu.tw/~algo/DirectedAcyclicGraph.html
https://ithelp.ithome.com.tw/articles/10266857
>>: [06] [Flask 快速上手笔记] 05. 发送请求与文件上传
接续之前做容器,希望可以用code连到另台电脑的container,做了ssh的一些测试 先做了一个...
有鉴於自己的金鱼脑,常常学了东西就瞬间忘光,觉得需要找寻一个方式让自己能够纪录并且整理内化。因此决定...
其实今年才刚学Vue.js ,目前的程度大概就是写几个简单的功能而已,要写一个比较完整的网站还是十分...
本文目标 熟悉 UNIX 作业系统的发展 认识自由软件运动与 GNU 计画 了解 C 语言是被设计来...
什麽是LTV Lifetime value 的头字母简称。中文翻为「顾客终身价值」。 意思是,平均而...