我有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 ...
开始答案 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--------------------------------");
}
}
}