图图图图!!!

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

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

    public int findJudge(int N, int[][] trust) {
        HashMap>map=new HashMap<>();
        for(int[] ints:trust){
           Listlist=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,直接列出题干吧

图图图图!!!_第2张图片

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

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

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

 

你可能感兴趣的:(图图图图!!!)