在我的代码中,不确定为什么在用单词构建的图中找不到连接。
ArrayList<String> words = new ArrayList<String>();
words.add("hello");
words.add("there");
words.add("here");
words.add("about");
Graph g = new Graph(words.size());
for(String word: words) {
for(String word2: words){
g.addEdge(words.indexOf(word), words.indexOf(word2));
}
}
BufferedReader readValues =
new BufferedReader(new InputStreamReader(new FileInputStream("values.txt")));
while(true)
{
String line = readTestFile.readLine();
if (line == null) { break; }
assert line.length() == 11;
String start = line.substring(0, 5);
String goal = line.substring(6, 11);
BreadthFirstPaths bfs = new BreadthFirstPaths(g, words.indexOf(start));
if (bfs.hasPathTo(words.indexOf(goal))) {
System.out.println(bfs.distTo(words.indexOf(goal)));
for (int v : bfs.pathTo(words.indexOf(goal))) {
System.out.println(v);
}
}
else System.out.println("Nothing");
}
文本文件的内容:
hello there
hello here
about here
我似乎明白了:
Nothing
Nothing
Nothing
Nothing
Nothing
不知道为什么?
编辑:op似乎对这里的代码有问题,尤其是图形。我不知道具体原因,但是,我肯定有人这样做。
2条答案
按热度按时间nx7onnlm1#
我想您使用的源代码来自robertsedgewick和kevinwayn关于java算法实现的优秀书籍,第4版。
没有理由不让代码正常工作。请根据您的代码考虑以下测试:
如果使用指定的文本文件运行此程序,将生成类似以下内容的输出:
我介绍的主要变化是与计算
start
以及goal
变量:我假设您正在使用另一个文本文件,也许是另一个代码;如果提供了一个Assert,则Assert将失败或失败
StringIndexOutOfBounds
计算时将引发异常goal
作为substring
从索引6
至11
.除此之外,算法应该可以正常工作。
也就是说,请注意,您正在构造一个超连通图,其中每个节点都有一个指向不同节点和自身的直接路径。也许这是你的目标,但要注意,当你做其他事情时,事情会变得有趣。
例如,如果不使用此代码:
你可以这样做:
算法的输出更有意义:
nwsw7zdq2#
我想您使用的是java教科书中的代码
你的代码应该是
请注意修改
//原始线条。
上面的代码产生