跳转至

LCP 07.传递信息 (Easy)*

题目描述*

思路 & 代码*

题干真长

可以求邻接矩阵的 k 次方,[i][j] 处的值表示 i 到 j 的路径长度为 k 的路径数。

状态转移,维护 cur 和 next 数组,cur 为当前状态,next 为可达的下一状态,最后看 next 中有几个 n - 1。

或者用 dfs 走 k 步,终点为 n - 1 计数。

咋做都行,习惯用 bfs,走 k 步之后看队列里有几个终点。

class Solution {
public:
    int numWays(int n, vector<vector<int>>& relation, int k) {
        unordered_map<int, vector<int>> g;
        for(auto r : relation) {
            g[r[0]].push_back(r[1]);
        }
        queue<int> q;
        q.push(0);
        int cnt = 0;
        int res = 0;
        while(!q.empty()) {
            cnt++;
            int len = q.size();
            while(len--) {
                int cur = q.front();
                q.pop();
                auto next = g[cur];
                for(auto i : next) {
                    q.push(i);
                }
            }
            if(cnt == k) {
                break;
            }
        }
        while(!q.empty()) {
            int cur = q.front();
            q.pop();
            if(cur == n - 1) {
                res++;
            }
        }
        return res;
    }
};

最后更新: July 23, 2022