3243. 新增道路查询后的最短距离 I

33 阅读1分钟

题目链接

leetcode.cn/problems/sh…

思路

dfs+记忆化搜索

代码

class Solution {
public:
    int n;
    vector<vector<int>>memo;
    vector<int> shortestDistanceAfterQueries(int n, vector<vector<int>>& queries) {
        this->n=n;
        int t=queries.size();
        memo.resize(n,vector<int>(t,-1));
        vector<int>ans;
        for(int i=0;i<t;i++){
            
            ans.push_back(dfs(0,queries,i));
        }
        return ans;
    }

    int dfs(int num,const vector<vector<int>>& queries,int i){
        if(memo[num][i]!=-1)return memo[num][i];
        if(num==n-1)return 0;

        int res=INT_MAX;

        for(int j=0;j<=i;j++){
            if(queries[j][0]==num){
                res=min(res,dfs(queries[j][1],queries,i)+1);
            }
        }

        return memo[num][i]=min(res,dfs(num+1,queries,i)+1);
    }
};