题解 | #牛群的喂养顺序#

牛群的喂养顺序

https://www.nowcoder.com/practice/ce8860b6a8c74dfd8ccd15998970e447

考察的知识点:映射、迭代器;

解答方法分析:

  1. 首先,代码定义了一个canFeedAllCows函数,函数的参数包括numCows和feedOrders。
  2. 在函数内部,通过map来存储喂养顺序,其中feedOrder[1]作为键,feedOrder[0]作为值,这样可以方便地根据顺序查询对应的牛。
  3. 代码中使用了一个for循环来遍历map中的键值对,找出起始顺序和结束顺序,并将其赋值给start和end变量。同时,使用flag变量来标记是否已经找到起始顺序和结束顺序。
  4. 然后,使用一个while循环,从起始顺序开始,通过map查找下一个顺序,直到到达结束顺序。在此过程中,如果发现在map中找不到下一个顺序,就说明可以喂养所有的牛,返回true;否则,继续查找下一个顺序,直到循环结束。
  5. 如果循环结束后仍未找到结束顺序,说明存在循环依赖,即无法喂养所有的牛,返回false。
  6. 最后,在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;
    }
};

全部评论

相关推荐

有没有佬投这个呀,怎么样呀求问
投递中科院空天信息创新研究院等公司10个岗位
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务