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

时间:2015-04-12 08:34:00

标签: java breadth-first-search

我有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 ...

开始

1 个答案:

答案 0 :(得分:0)

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

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--------------------------------");
        }

    }
}