通过率为82.35%,但是死活找不出bug在哪

牛牛质数

https://ac.nowcoder.com/acm/contest/6915/A

有没有大佬帮忙看一下,通过率为82.35%,提示请检查是否存在数组越界等非法访问情况,但是死活找不出bug在哪

import java.util.*;

/*
 * public class Point {
 *   int x;
 *   int y;
 * }
 */

public class Solution {
    /**
     * 牛牛经过的房间数。
     * @param n int整型 
     * @param x int整型 
     * @param Edge Point类一维数组 
     * @return int整型
     */
    int[][] dist;
    boolean[][] vis;
    Set<Integer>[] edge;
    public void dfs(int flag,int cur){

        //System.out.println(cur)
        for(int child:edge[cur]){
            if(vis[flag][child]==false){
                vis[flag][child]=true;
                dist[flag][child]=dist[flag][cur]+1;
                dfs(flag,child);
            }
        }
    }
    public int solve (int n, int x, Point[] Edge) {
        // write code here
        if(x==1) return 0;
        int res=0;
        dist=new int[2][n+10];
        vis=new boolean[2][n+10];
        edge=new Set[n+10];
        for(int i=1;i<=n;i++) edge[i]=new HashSet<>();
        for(Point p:Edge){
            edge[p.x].add(p.y);
            edge[p.y].add(p.x);
        }
        vis[0][1]=true;
        vis[1][x]=true;
        dist[0][1]=1;
        dist[1][x]=1;
        dfs(0,1);
        dfs(1,x);
        for(int i=1;i<=n;i++){
            if(dist[0][i]>dist[1][i])
                res=Math.max(res,dist[0][i]);
        }
        return res;
    }
}
全部评论
我和你是一样的错误,最后想到是dfs递归爆栈了,你改成bfs就可以了。
1 回复 分享
发布于 2020-08-15 23:30
求问这个for循环是什么含义?有没有大佬可以给我解释一下。呜呜┭┮﹏┭┮ for(int i=1;i<=n;i++){ if(dist[0][i]>dist[1][i]) res=Math.max(res,dist[0][i]); }
点赞 回复 分享
发布于 2020-08-16 22:02
亲测就是dfs爆栈了,也是换了bfs就过了
点赞 回复 分享
发布于 2020-08-16 19:46
改成bfs就行了
点赞 回复 分享
发布于 2020-08-16 17:40
你把set换成数组试一下,可能是set爆了
点赞 回复 分享
发布于 2020-08-16 17:34
我也是这样,但是我查看别的通过的java代码时,发现了一段神仙代码!!! public int solve (int n, int x, Point[] Edge) { try{ Thread t = new Thread(null,()->{ solve0(n, x, Edge); },"", 1 << 30); t.start(); t.join(); }catch(Exception e){ } // write code here return ans+1; } 我照着他的做法,把dfs的程序另开一个线程,居然真的过了!!,真的过了。 可是搞不懂是什么原理啊。
点赞 回复 分享
发布于 2020-08-16 09:42
c++ 好强啊!!!他们dfs就可以过。要哭了
点赞 回复 分享
发布于 2020-08-15 23:32

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务