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 693. 交替位二进制数 / 2024. 考试的最大困扰度 / 1606. 找到处理最多请求的服务器