【问题标题】:DFS and BFS on Adjacency Matrix, Java邻接矩阵上的 DFS 和 BFS,Java
【发布时间】:2017-03-21 20:11:14
【问题描述】:

我正在尝试用 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)

出错的代码如下sn-ps:

    // 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 语句的第二行:

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);

}

}

任何帮助将不胜感激。

【问题讨论】:

    标签: java indexoutofboundsexception breadth-first-search adjacency-matrix microsoft-distributed-file-system


    【解决方案1】:

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

    由于u 采用的每个值都是adj[v] 的一个元素,因此推断adj[v] 包含错误数据似乎是合理的,或者您对其内容的解释不正确。我只能推测这可能是如何或为什么会这样,但我的第一个猜测是adj[v] 的元素是用基于 1 的索引表示的(也就是说,好像最小的有效数组索引是 1),而Java 使用基于 0 的索引。

    【讨论】:

    • 所以我的 dfVisit 方法基于这个伪代码,你有什么建议..Graph :: dfVisit( Vertex prev, Vertex v) Begin visited[v] = ++id print “Visited vertex “, v, “ along edge “, prev, “—“, v for each vertex u  adj(v) if not visited[u] dfVisit(u) End
    • 我真的不能再说什么了,@AmyKelly。我认为您尝试实施的 算法 没有任何本质上的错误。相反,问题似乎在于您对正在使用的数据和/或您的实施细节的解释。您没有提供任何人所需的信息,以便比我已经提供的更具体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多