关于邻接矩阵的DFS和BFS,Java

时间:2017-03-21 20:11:15

标签: java indexoutofboundsexception breadth-first-search adjacency-matrix dfs

我正在尝试用Java编写一个程序,它在邻接矩阵上执行DFS和BFS。到目前为止我编写的代码编译并提供了所需的输出。

但是我收到一个我无法解决的错误,我觉得这可能与我的for循环有关。

错误如下:

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at GraphMatrix.dfVisit(GraphMatrix.java:304)
        at GraphMatrix.dfVisit(GraphMatrix.java:306)
        at GraphMatrix.dfVisit(GraphMatrix.java:306)
        at GraphMatrix.DF(GraphMatrix.java:261)
        at GraphMatrix.main(GraphMatrix.java:347)

错误在以下代码段中的代码:

    // method to initialise Depth First Traversal of Graph
public void DF( int s)
{
    id = 0;

    for(int v = 1; v <= V; v++) {
        visited[v] = 0;

    }
    dfVisit(0, s); //error being signaled here

}

第二个来自if statment:

private void dfVisit( int prev, int v)
{
    visited[v] = ++id;
    System.out.println("Visited vertex" + ": " + v + "  Along edge  : " + prev);

    for (int u: adj[v]) {
       if (visited[u] != visited[v]) {

           dfVisit(prev, u);
       }
    }
}

最后,主要是g.DF(s):

 public static void main(String[] args) throws IOException
{
    int s = 4;
    String fname = "wGraph3.txt";

    GraphMatrix g = new GraphMatrix(fname);

    g.display();

    g.DF(s);


    g.BF(s);

}

}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据堆栈跟踪,从dfVisit()方法抛出异常,显然是在评估表达式visited[u] != visited[v]时。从上下文来看,它必须来自u超出数组visited的范围(否则会先抛出异常)。异常消息为您提供了越界索引(9)的值。

由于每个值u都是adj[v]的元素,因此可以合理地断定adj[v]包含错误数据,或者您正在错误地解释其内容。我只能推测这可能是怎么回事,但我的第一个猜测是adj[v]的元素是用基于1的索引表示的(也就是说,好像最小的有效数组索引是1) ,而Java使用基于0的索引。

相关问题