Java的如果20分只通过一个后面全RE的解决方案
查看原帖
Java的如果20分只通过一个后面全RE的解决方案
1259555
fgba楼主2024/4/7 19:17

问题原因

在逛了一圈帖子之后发现可能是dfs递归写法带来的栈溢出问题

解决方案

将dfs递归写法改为dfs栈的写法 这里注意要倒序推入栈中,否则会先访问值最大的节点,不符合题意 参考代码如下:

private void dfs(Set<Integer>[] edges) {
            Deque<Integer> stack = new LinkedList<>();
            stack.push(1);  // 使用 push 替换 add

            while (!stack.isEmpty()) {
                int u = stack.pop();

                if (visited[u]) {
                    continue;
                }
                visited[u] = true;
                fastWriter.print(u + " ");
                // 需要倒序推入节点
                List<Integer> children = new ArrayList<>(edges[u]);
                children.sort(Collections.reverseOrder());
                for (int v : children) {
                    if (!visited[v]) {
                        stack.push(v);  // 将未访问的邻接节点直接推入栈中
                    }
                }
            }
        }
2024/4/7 19:17
加载中...