我正在尝试搜索各种地图。有Town对象和Path对象。城镇通过城镇名称连接到路径。例如,如果您有一个城镇的名称,并且您有第二个城镇的名称,您可以看到他们是否建立了一条路径。玩家可以控制路径,如果他们这样做,路径就会变成颜色。
我想递归搜索路径,看看我是否通过路径从一个城镇到另一个城镇的连接。我已经包含了一张我想要做的照片。 start是start参数,end是结束。双线是我控制的路径,并附有我的颜色。
现在如何编写代码,我将陷入第二个城镇,因为它会发现它是我拥有的路径并将其标记为已访问。我知道我必须以某种方式回溯,但我不确定我会怎么做。
public boolean continuousPath(Town start, Town end)
{
//search for towns with the same name
//as the starting town
for(Path p : paths)
{
if(p.getStartTown().equals(start))
{
matches.add(p); //add it to an arraylist of matches
}
}
//for the matches arrayList
for(Path pa: matches)
{
if(pa.getEndTown().equals(end)){
matches.clear();
return true;
}
else{
if(!alreadyVisited(r)){
if(p.getPlayerColor().equals(colorArray[playerTurn]))
{
visited.add(r);
matches.clear();
Town tempTown = r.getEndTown();
continuousPath(tempTown, end);
}
}
}
}
return false;
}
public boolean alreadyVisited(Path p)
{
for(Path pathInstance : visited){
if(p.getName().equals(pathInstance.getName()))
{
return true;
}
}
return false;
}
我想要做的事情的图片:
答案 0 :(得分:0)
您正在做的事情称为图遍历。看看Dijkstra的算法,它可能是最直接的图遍历。
http://math.mit.edu/~rothvoss/18.304.3PM/Presentations/1-Melissa.pdf