图图图图!!!

终于开始图了,我估计我已经想着复习图有好久时间了,4月24日开始了奥!今天做了两个图的问题,不多BB,直接列出题干,

这道题,很简单,但是我用的方法有些麻烦了,我是一步一步分析,首先如果法官不相信任何人,那么他的邻接矩阵肯定全是0,我先找到邻接矩阵全是0或者不存在的,问题来了,如果有两个人都是这样呢?那么我直接返回1,然后我看每个人都信任小镇的法官,我们知道每个元素的邻接矩阵肯定都含有法官的标号,也就是法官的矩阵为1.那么我们列出代码:等等,这道题这几个条件如果放在图里面,不就是法官出度为0,入度为N-1 吗,(有人会问,如果有人没相信别人,也就是没有这个人呢)那肯定就是没办法判断了呀 ,所以成立的,下面我们列出代码吧:“

    public int findJudge(int N, int[][] trust) {
        HashMap<Integer,List<Integer>>map=new HashMap<>();
        for(int[] ints:trust){
           List<Integer>list=map.getOrDefault(ints[0],new ArrayList<>());
           list.add(ints[1]);
           map.put(ints[0],list);
        }
        int judge=-1;
        for(int i=1;i<=N;i++){
            if(!map.containsKey(i)||map.get(i).size()==0)  {
                if(judge!=-1) return -1;
                judge=i;
            }
        }
        if(judge!=-1){
            for(int i=1;i<=N;i++){
                if(i==judge) continue;
                if(!map.get(i).contains(judge)) return -1;
            }
        }
        return  judge;
    
    }

下面这道题,是图的dfs,直接列出题干吧

首先建立邻接矩阵,然后对于邻接矩阵进行深度遍历,问题很简单,但是我们要找到最小的字符,首先我们要对于邻接矩阵进行排序,小的放前面,然后我们结束语句应该是什么呢?应该是我们将直到邻接矩阵只剩下一个时候,我们添加他,这就说明成功了,但是我们这样添加逆序的,我们最后调转一下就好了,下面我们列出代码:

    HashMap<String,List<String>>mapAir=new HashMap<>();
    List<String>ansaaa=new ArrayList<>();
    public List<String> findItinerary(List<List<String>> tickets) {
        for(List<String> ticket:tickets){
            List<String>list=mapAir.getOrDefault(ticket.get(0),new ArrayList<>());
            list.add(ticket.get(1));
            mapAir.put(ticket.get(0),list);
        }
        for(List<String>list:mapAir.values()){
            Collections.sort(list);
        }
        addItinerary("JFK");
        Collections.reverse(ansaaa);
        return ansaaa;
    //    ans.add(addItinerary(tickets,"JFK"));

    }
    public void addItinerary(String begin){
        List<String>ne=mapAir.get(begin);
        while (ne!=null&&ne.size()>0){
            String temp=ne.get(0);
            ne.remove(0);
            addItinerary(temp);
        }
        ansaaa.add(begin);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值