【问题标题】:Recursive searching for a continuous path递归搜索连续路径
【发布时间】:2023-03-27 05:04:01
【问题描述】:

我正在尝试搜索各种地图。有 Town 对象和 Path 对象。城镇通过城镇名称连接到路径。因此,例如,如果您有一个城镇的名称,并且您有第二个城镇的名称,您可以查看它们是否创建了路径。玩家可以控制路径,如果他们这样做了,路径就会改变颜色。

我想递归搜索路径,看看我是否通过路径从一个城镇连接到另一个城镇。我已经附上了一张我正在尝试做的图片。 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;
}

我正在尝试做的事情的图片:

【问题讨论】:

    标签: java search recursion


    【解决方案1】:

    您所做的称为图遍历。看看 Dijkstra 的算法,它可能是最直接的图遍历。

    http://math.mit.edu/~rothvoss/18.304.3PM/Presentations/1-Melissa.pdf

    【讨论】:

    • 谢谢!如果不是在我的示例中从 tempTown 开始,而是从头开始,它已经知道我沿着这些路径走。如果可以的话会投票
    • 没问题!如果您想表示感谢,请选择我的答案作为解决方案:)
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2014-03-01
    • 2019-10-25
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多