簡體   English   中英

如何從源節點Java代碼查找所有路徑

[英]How to find all path from Source node java code

我有輸入的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--------------------------------");
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM