ZBLOG

// class Solution { // public: // vector visited; // bool IsExit = false; // void DFS(int i, int target, vector &visited, std::unordered_map map) { // if (IsExit) return; // if (i == target...

在这段代码中,你的DFS函数使用了递归来进行深度优先搜索,但是由于没有使用剪枝操作,可能导致重复搜索和无限递归,从而导致超时。可以考虑以下几点进行优化:

  1. 使用标记数组代替vector visited:可以使用一个大小为n的bool数组来表示节点是否已经访问过,避免每次递归都重新构建visited数组。

  2. 使用unordered_set替代vector来存储邻接表:使用unordered_set会更高效地判断元素是否存在,并且可以避免插入重复元素。

  3. 添加剪枝操作:在递归前判断target节点是否已经被访问过或者已经找到路径,如果是则直接返回。

下面是优化后的代码示例:

class Solution {
public:
    bool IsExit = false;

    void DFS(int i, int target, vector<bool>& visited, unordered_map<int, unordered_set<int>>& map) {
        if (IsExit || visited[i]) return;
        if (i == target) {
            IsExit = true;
            return;
        }
        visited[i] = true;

        if (map.count(i)) {
            for (const auto item : map[i]) {
                DFS(item, target, visited, map);
            }
        }
    }

    bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {
        unordered_map<int, unordered_set<int>> map;
        
        for (const auto& edge : graph) {
            int u = edge[0];
            int v = edge[1];
            map[u].insert(v);
        }

        vector<bool> visited(n, false);
        DFS(start, target, visited, map);

        return IsExit;
    }
};

这样做的优化点主要在于减少了重复搜索和无限递归,使用unordered_set提高查找效率,以及使用bool数组代替vector来记录访问状态。希望对你有帮助!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9895

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?