我正在尝试用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);
}
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
根据堆栈跟踪,从dfVisit()
方法抛出异常,显然是在评估表达式visited[u] != visited[v]
时。从上下文来看,它必须来自u
超出数组visited
的范围(否则会先抛出异常)。异常消息为您提供了越界索引(9)的值。
由于每个值u
都是adj[v]
的元素,因此可以合理地断定adj[v]
包含错误数据,或者您正在错误地解释其内容。我只能推测这可能是怎么回事,但我的第一个猜测是adj[v]
的元素是用基于1的索引表示的(也就是说,好像最小的有效数组索引是1) ,而Java使用基于0的索引。