我正在尝试在图形中查找所有可能的所有可能路径。当我运行程序时,出现错误消息ArrayIndexOutOfBoundsException。我需要在哪里修复代码来解决此错误
private int v;
void printAllPaths(String s, String d) {
int start=airportsHashMap.get(s).intValue();
int end=airportsHashMap.get(d).intValue();
//int DaRoute;
printPaths(start,end);
}
public void printPaths(int s, int d)
{
boolean[] isVisited = new boolean[v];
ArrayList<Integer> pathList = new ArrayList<>();
//add source to path[]
pathList.add(s);
//Call recursive utility
printAllPathsUtil(s, d, isVisited, pathList);
}
// A recursive function to print
// all paths from 'u' to 'd'.
// isVisited[] keeps track of
// vertices in current path.
// localPathList<> stores actual
// vertices in the current path
private void printAllPathsUtil(Integer u, Integer d,
boolean[] isVisited,
List<Integer> localPathList) {
// Mark the current node
isVisited[u] = true;
if (u.equals(d))
{
System.out.println(localPathList);
// if match found then no need to traverse more till depth
isVisited[u]= false;
return ;
}
// Recur for all the vertices
// adjacent to current vertex
for (Integer i :adjListArray[u])
{
if (!isVisited[i])
{
// store current node
// in path[]
localPathList.add(i);
printAllPathsUtil(i, d, isVisited, localPathList);
// remove current node
// in path[]
localPathList.remove(i);
}
}
// Mark the current node
isVisited[u] = false;
}
我希望输出看起来像:
EWR和PHL之间的所有路径
EWR IAD ILG PHL EWR IAD PHL EWR PHL
EWR和ILG之间的所有路径
EWR IAD ILG EWR IAD PHL ILG EWR PHL ILG EWR PHL IAD ILG
最佳答案
我认为例外是因为您滥用删除。您应该传递索引而不是'object'。
for (Integer i :adjListArray[u])
{
if (!isVisited[i])
{
// store current node
// in path[]
localPathList.add(i); <=== i the 'object'
printAllPathsUtil(i, d, isVisited, localPathList);
// remove current node
// in path[]
localPathList.remove(i); <=== i should be 'index' not object
}
}
您的冷嘲讽是这样的:
for (Integer i :adjListArray[u])
{
if (!isVisited[i])
{
// store current node
// in path[]
localPathList.add(i);
printAllPathsUtil(i, d, isVisited, localPathList);
// remove current node
// in path[]
localPathList.remove(localPathList.size()-1);
}
}