题解 | #牛群的喂养顺序II# 拓扑排序
牛群的喂养顺序II
https://www.nowcoder.com/practice/05abc133293a42358bbbb4016034728e
知识点
拓扑排序
思路
和上一道题完全一样,只需要在bfs出队的时候记录下顺序即可。
如果结果数组记录已达的点的个数等于全部个数,证明全部点可达;否则返回空数组。
时间复杂度
点数为n 边数为m
时间复杂度为
AC code(C++)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numCows int整型
* @param feedOrders int整型vector<vector<>>
* @return int整型vector
*/
vector<int> findFeedOrderII(int numCows, vector<vector<int> >& feedOrders) {
// 拓扑排序
vector<vector<int>> g(numCows);
vector<int> d(numCows, 0);
for (auto& v : feedOrders) {
int a = v[0], b = v[1];
g[b].push_back(a);
d[a] += 1;
}
// bfs
queue<int> q;
for (int i = 0; i < numCows; i ++) {
if (!d[i]) {
q.push(i);
}
}
vector<int> res;
while (!q.empty()) {
auto t = q.front();
res.push_back(t);
q.pop();
for (auto x : g[t]) {
if (-- d[x] == 0) {
q.push(x);
}
}
}
if (res.size() == numCows) return res;
return {};
}
};

字节跳动公司福利 1292人发布