栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 1601 最多可达成的换楼请求数目[回溯 dfs] HERODING的LeetCode之路

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 1601 最多可达成的换楼请求数目[回溯 dfs] HERODING的LeetCode之路



解题思路:
一道非常常规的回溯题,定义访问数组,用来统计每栋楼的入度出度情况,从第一个请求开始,选择该请求或者不选择该请求,直到所有请求都遍历完毕,这个时候如果所有楼入度出度为0,则该请求序列可达成,更新最长请求序列。注意,每次选择当前请求后,要记得回溯,把访问数组恢复成上一个请求时的状态,代码如下:

class Solution {
private:
    int n;
    int size;
    int request = 0;
    vector visited;
public:
    int maximumRequests(int n, vector>& requests) {
        this->n = n;
        size = requests.size();
        visited = vector(n, 0);
        dfs(0, 0, requests);
        return request;
    }

    void dfs(int i, int len, vector>& requests) {
        // 超过请求长度
        if(i == size) {
            for(int j = 0; j < n; j ++) {
                if(visited[j] != 0) {
                    return;
                }
            }
            request = max(request, len);
            return;
        }
        // 跳过该请求
        dfs(i + 1, len, requests);
        // 选择该请求
        visited[requests[i][0]] --;
        visited[requests[i][1]] ++;
        dfs(i + 1, len + 1, requests);
        // 回溯
        visited[requests[i][0]] ++;
        visited[requests[i][1]] --;
    }

};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/748956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号