如何从源节点 java 代码中查找所有路径



我有输入HashMap

static HashMap<Integer, List<Integer> > map = new HashMap<Integer, List<Integer>>();

基本输入如下所示:

1 :: [2, 11] , 2 :: [1, 3] , 3 :: [2, 11, 5] , 4 :: [11, 12] , 5 :: [6, 7, 3] , 6 :: [5, 7] , 7 :: [5, 6] , 8 :: [12, 10] , 9 :: [12, 10] , 10 :: [8, 9] , 11 :: [1, 3, 4] , 12 :: [4, 8, 9]

哪个显示从 1,我可以去 2 或 11,从 2 到 1 或 3......

我需要找到我们可以旅行的最大节点长度,从 1...

最后,

我编写了一个程序来解决这个问题。我假设没有无限循环。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
class Kavi {
    static HashMap<Integer, List<Integer> > map = new HashMap<Integer, List<Integer>>();
    static HashMap<Integer, HashSet<Integer> > nodeValuesMap=new HashMap<Integer, HashSet<Integer>>();
    static HashMap<Integer, HashSet<Integer> > allPossibleTraversedNodes=new HashMap<Integer, HashSet<Integer>>();

    static HashMap<Integer, List<Integer> > putVal()
    {
        ArrayList<Integer> list;
        list=new ArrayList<Integer>();
        list.add(2); list.add(4);
        map.put(1, list);
        list=new ArrayList<Integer>();
        list.add(3);list.add(5); list.add(6);
        map.put(2, list);
        list=new ArrayList<Integer>();
        list.add(6);
        map.put(3, list);
        list=new ArrayList<Integer>();
        list.add(3);list.add(5); list.add(6);
        map.put(4, list);
        list=new ArrayList<Integer>();
        list.add(6);
        map.put(5, list);
        return map;
    }

    public static void recurs(int node)
    {
            ArrayList<Integer> list=(ArrayList<Integer>) map.get(node);
                    if(list==null)
                        return;
            if(nodeValuesMap.get(node)==null)
            {
                HashSet<Integer> nodeSet=new HashSet<Integer>();
                nodeSet.addAll(list);
                nodeValuesMap.put(node,nodeSet );
                  for(Integer i:nodeSet)
                    recurs(i);
            }
            else
            {
                HashSet<Integer> nodeSet=nodeValuesMap.get(node);
                nodeSet.add(node);
                nodeValuesMap.put(node, nodeSet);
            }
    }

    public static void main(String[]
            args){
        putVal();
        for(int i=1;i<=map.size();i++)
        {
            recurs(i);
            HashSet<Integer> tempNodeSet=new HashSet<Integer>();
            for(int j=1;j<=map.size();j++)
            {
                if(null!=nodeValuesMap.get(j))
                  tempNodeSet.addAll(nodeValuesMap.get(j));
            }
            allPossibleTraversedNodes.put(i,tempNodeSet);
            nodeValuesMap.clear();
        }
        for(int i=1;i<=allPossibleTraversedNodes.size();i++)
        {
            HashSet<Integer> nodeSet=(HashSet<Integer>) allPossibleTraversedNodes.get(i);
            System.out.println("Base Node := "+i +" All Possible Traversed Nodes:= ");
            for(Integer node:nodeSet)
                System.out.print(node+" , ");
            System.out.println("n--------------------------------");
        }
    }
}

最新更新