比较重量
小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间后,它们看中了两颗钻石g1和g2。现在请你根据之前比较的信息判断这两颗钻石的哪颗更重。
给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。最后给定之前的比较次数n。请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0。输入数据保证合法,不会有矛盾情况出现。
测试样例:
2,3,[[1,2],[2,4],[1,3],[4,3]],4 返回: 1 Solution
1 import java.util.*; 2 3 public class Cmp { 4 public int cmp(int g1, int g2, int[][] records, int n) { 5 Map<Integer,List<Integer>> map=new HashMap<Integer,List<Integer>>(); 6 int max=0; 7 for(int[] pair:records){ 8 if(!map.containsKey(pair[0])){ 9 List<Integer> list=new ArrayList<Integer>(); 10 list.add(pair[1]); 11 map.put(pair[0],list); 12 } 13 else map.get(pair[0]).add(pair[1]); 14 int temp=(pair[0]>pair[1])?pair[0]:pair[1]; 15 max=(max>temp)?max:temp; 16 } 17 boolean[] isVisited1=new boolean[++max]; 18 boolean[] isVisited2=new boolean[max]; 19 if(isReachable(g1,g2,map,isVisited1)) return 1; 20 else if(isReachable(g2,g1,map,isVisited2)) return -1; 21 else return 0; 22 23 } 24 private boolean isReachable(int now,int target,Map<Integer,List<Integer>> map,boolean[] isVisited){ 25 if(now==target) return true; 26 isVisited[now]=true; 27 if(map.get(now)==null) return false; 28 int size=map.get(now).size(); 29 for(int i=0;i<size;i++){ 30 int next=map.get(now).get(i); 31 if(isVisited[next]) continue; 32 else if(isReachable(next,target,map,isVisited)) return true; 33 } 34 return false; 35 } 36 }
时间: 2024-12-12 23:51:27