题解 | #牛群的喂养顺序#
牛群的喂养顺序
https://www.nowcoder.com/practice/ce8860b6a8c74dfd8ccd15998970e447
考察的知识点:映射、迭代器;
解答方法分析:
- 首先,代码定义了一个canFeedAllCows函数,函数的参数包括numCows和feedOrders。
- 在函数内部,通过map来存储喂养顺序,其中feedOrder[1]作为键,feedOrder[0]作为值,这样可以方便地根据顺序查询对应的牛。
- 代码中使用了一个for循环来遍历map中的键值对,找出起始顺序和结束顺序,并将其赋值给start和end变量。同时,使用flag变量来标记是否已经找到起始顺序和结束顺序。
- 然后,使用一个while循环,从起始顺序开始,通过map查找下一个顺序,直到到达结束顺序。在此过程中,如果发现在map中找不到下一个顺序,就说明可以喂养所有的牛,返回true;否则,继续查找下一个顺序,直到循环结束。
- 如果循环结束后仍未找到结束顺序,说明存在循环依赖,即无法喂养所有的牛,返回false。
- 最后,在main函数中读取输入的牛的数量和喂养顺序,调用canFeedAllCows函数,并将结果输出。
所用编程语言:C++;
完整编程代码:
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param numCows int整型 * @param feedOrders int整型vector<vector<>> * @return bool布尔型 */ bool canFeedAllCows(int numCows, vector<vector<int> >& feedOrders) { std::map<int, int> map; for (auto& feedOrder : feedOrders) { map[feedOrder[1]] = feedOrder[0]; } int start = 0; int end = 0; bool flag = false; for (auto& entry : map) { if (!flag) { start = entry.first; end = entry.second; flag = true; break; } } while (start != end) { if (map.count(end) == 0) { return true; } end = map[end]; } return false; } };