终于开始图了,我估计我已经想着复习图有好久时间了,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);}