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

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1601 最多可达成的换楼请求数目[回溯 dfs] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。



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

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

    void dfs(int i, int len, vector<vector<int>>& 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]] --;
    

;

以上是关于LeetCode 1601 最多可达成的换楼请求数目[回溯 dfs] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode] 最多可达成的换楼请求数目 暴力水题

LeetCode 693. 交替位二进制数 / 2024. 考试的最大困扰度 / 1606. 找到处理最多请求的服务器

excel最多能存储多少条数据

Excel VBA 一次搜索最多可搜索 15 个值

Dataproc 集群最多可并行运行 5 个作业,忽略可用资源

MySQL最多可建立多少索引和索引的限制