84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
认证高级PHP讲师
BSF:
private static class Pair{ char c; int duration; public Pair(char c, int duration) { this.c = c; this.duration = duration; } } public int search(String[] input){ Map<Character, Set<Pair>> map = new HashMap<>(); for(String s: input){ char c1 = s.charAt(0), c2 = s.charAt(1); int duration = s.charAt(2) - '0'; if(!map.containsKey(c1)) map.put(c1, new HashSet<>()); map.get(c1).add(new Pair(c2, duration)); } int count = 0; Queue<Pair> q = new LinkedList<Pair>(); q.offer(new Pair('C', 0)); while(!q.isEmpty()){ int size = q.size(); while(size-- > 0){ Pair cur = q.poll(); for(Pair p: map.get(cur.c)){ if(cur.duration + p.duration >= 30) continue; if(p.c == 'C') count++; q.offer(new Pair(p.c, cur.duration + p.duration)); } } } return count; } @Test public void test(){ assertEquals(7, search(new String[]{"AB5", "BC4", "CD8", "DC8", "DE6", "AD5", "CE2", "EB3", "AE7"})); }
题目没有给出数据范围,如果数据比较小的话,在每个点上挂一张表,表示从C到该点有哪些路径长度可行,然后从C开始做一遍BFS即可,最后统计C点上表的大小即可。如果数据比较大可以考虑Tarjan缩环啥的……
BSF:
题目没有给出数据范围,如果数据比较小的话,在每个点上挂一张表,表示从C到该点有哪些路径长度可行,然后从C开始做一遍BFS即可,最后统计C点上表的大小即可。如果数据比较大可以考虑Tarjan缩环啥的……