0
  • 为啥要我说得这么直白呢?你学的是啥玩意呀???


    findRoad(map, d, f, new HashSet<Integer>());


     private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f,HashSet<Integer> set) {


    这个set 不是你 new HashSet<Integer>()这个么?


    你有放入数值么?有操作过么?


    没有操作过set.contains(f)意义何在?代码写着玩么?浪费这么多时间。每行代码我都看得懂,都不想点破。


    好好学习基础,不行从头来。要不很简单的问题你会浪费自己和别人很多时间的。另外,log要加标记,前缀/后缀,否则哪里出来的你都不知道。



    public class Main {
    	//创建一个集合
        static List<HashSet> list =new LinkedList<>();
        public static void main(String[] args) {
    		//扫描输入内容
            Scanner scanner = new Scanner(System.in);
            HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
    		//第一个数值
            int n = scanner.nextInt();
    		//第二个数值
            int m = scanner.nextInt();
    		//做m次循环
            while (m-- > 0) {
    			//输入数值u---> key
                int u = scanner.nextInt();
    			//输入数值 v---> List<value>
                int v = scanner.nextInt();
    			//双创建一个集合从map里拿值,如果没有的话就返回一个空的集合
                ArrayList<Integer> orDefault = map.getOrDefault(u, new ArrayList<>());
    			//有默认值不为空,所以有集合
                if (orDefault == null) orDefault = new ArrayList<>();
    			//添加v值
                orDefault.add(v);
    			//把这个集合放到map里
                map.put(u, orDefault);
            }
    		//双来一个数值d
            int d = scanner.nextInt();
    		//再来一个数值f
            int f = scanner.nextInt();
    		//
            findRoad(map, d, f, new HashSet<Integer>());
    		//list有动过吗?
            if (list.size() <= 0) System.out.println(-1);
            else {
    			//
                int i1 = list.size();
                HashSet res = null;
                res=list.get(0);
                System.out.println(res);
                for (int i = 1; i < list.size(); i++) {
                    HashSet set1 = list.get(i);
                    res.retainAll(set1);
                }
                int size = res.size() == 1 ? 0 : res.size();
    
    
                System.out.println(size - 1);
            }
        }
        private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f,HashSet<Integer> set) {
    		//如果set包含f,这可能包含吗?set不是刚new的吗?
            if(set.contains(f)){
                list.add(set);
                for ( int i : set) {
                    System.out.print(i);
                }
                System.out.println();
                return;
            }
    		//d必须是前面输入的u,否则怎么可能有呢?
            ArrayList<Integer> arrayList = map.get(d);
            for (Integer integer : arrayList) {
                set.add(integer);
    			//递归?
                findRoad(map,integer,f,set);
                set.remove(integer);
            }
        }
    
    1153952789488054272  评论     打赏       拉大锯
    • 废物点心  回复 @拉大锯
      问题描述 定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。 本题的任务是:已知网络结构,求两站点之间的危险系数。 据第一行包含2个整数站点数,通道数; 接下来m行,每行两个整数 u,v 表示通道
      废物点心 2021-04-12 10:33   回复 1308289732882587648
    • 废物点心  回复 @拉大锯
      最后一行表示要求那d,f两点之间的系数,然后我写的时候我在list,add之前我打印了是有数值的,我逻辑就是用map+list存数值,之后从d开始进行搜索如果找到f就说明找到通路了把这通路存起来,最后去并集就是关键节点,但就是list get不到值。但最后那句话听的是醍醐灌顶,你给的意见我也去改一改
      废物点心 2021-04-12 10:39   回复 1308289732882587648
    • 废物点心  回复 @废物点心
      主要是我把那个方法体注释的太离谱了,所以没看到我塞进去数值的。。
      废物点心 2021-04-12 10:45   回复 1308289732882587648
    • 拉大锯  回复 @废物点心
      不管怎么样的业务,先把java基础学习好呢。就我提的那个问题,你直接new一个地象,里面什么东西都没有,为什么判断是否有包含呢?而且每次调用就创建一个对象,这个对象还是没有东西的。为什么要这么做呢?
      拉大锯 2021-04-12 11:25   回复 1153952789488054272
    • 废物点心  回复 @拉大锯
      对的,JAVA基础很重要,先判断再搜索是回溯法来的,我先判断是在搜索时候要递归的,如果已经包含了(说明有通路)那么就不走下面的了
      废物点心 2021-04-12 11:36   回复 1308289732882587648
  • 没注释,看不懂你要做什么。

    1153952789488054272  评论     打赏       拉大锯
    • 废物点心  回复 @拉大锯
      大锯师傅,我简化+注释了,麻烦你看看了
      废物点心 2021-04-11 22:12   回复 1308289732882587648
相关问题
康师傅的小跟班 · JAVA
2019-09-10 05:09 1295 2
2020-03-08 05:30 846 2
吕氏春秋 · java / 多线程并发
2020-03-19 03:46 859 4
不易 · java
2020-06-06 19:41 461 2
夙夜星辰叹 · javaweb
2020-06-24 03:07 457 2
2020-07-21 06:26 937 2
CodeWwang · JAVA
2020-07-22 06:11 440 2