我正在尝试在图形中查找所有可能的所有可能路径。当我运行程序时,出现错误消息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);
     }
 }

07-24 19:21