Java 深度优先遍历图递归测试
所以我写了一个解决方案,希望它能工作,但是我不知道如何测试它是否正常工作。在递归方法中,sor.edges只是通过相邻边进行迭代。如果任何其他方法需要澄清,请告诉我。谢谢Java 深度优先遍历图递归测试,java,recursion,Java,Recursion,所以我写了一个解决方案,希望它能工作,但是我不知道如何测试它是否正常工作。在递归方法中,sor.edges只是通过相邻边进行迭代。如果任何其他方法需要澄清,请告诉我。谢谢 public static List<String> depthFirstSearch(Graph graph, String startName, String goalName) { Vertex source = new Vertex(startName); Vertex dest = new Ver
public static List<String> depthFirstSearch(Graph graph, String startName, String goalName)
{
Vertex source = new Vertex(startName);
Vertex dest = new Vertex(goalName);
ArrayList<String> returnList = new ArrayList<String>();
if(!(graph.getVertices().containsKey(startName) || graph.getVertices().containsKey(goalName)))
throw new UnsupportedOperationException();
if(startName.equals(goalName))
{
returnList.add(startName);
return returnList;
}
return DFS(source, dest);
}
private static List<String> DFS(Vertex sor, Vertex des)
{
ArrayList<String> returnList = new ArrayList<String>();
if(!sor.getName().equals(des.getName()))
sor.setVisited(true);
Iterator<Edge> iterator = sor.edges();
while(iterator.hasNext())
{
Vertex nextVertex = iterator.next().getOtherVertex();
if(!nextVertex.getVisited())
{
nextVertex.setCameFrom(sor);
returnList.addAll((Collection<? extends String>) sor.getCameFrom());
return DFS(nextVertex, des);
}
}
return returnList;
}
他们的方法真的不是一种简单的自动化测试方法。我的建议是加入一些简单的图表,手工测试输出是否符合预期。另一个选项是两个测试。第一个是连通图,因为从开始到结束将存在一个路径,您只需要确认这是否生成了一个路径。第二个是一个不相交的图,其中第一个和最后一个没有连接,这里它们将是一个失败或类似的东西 对于您的问题,您可能希望抛出IllegalArguementException和UnsupportedOperationException