【问题标题】:Shortest path problem inside a grid structure网格结构内的最短路径问题
【发布时间】:2021-01-31 18:40:47
【问题描述】:

我正在开发一个基本程序,其中 2 名玩家在 30x30 大小的 2D 板上必须到达 2D 板上某处的 A*A 大小的较小网格(我们称之为地毯)。我需要计算哪个球员更接近地毯。我知道如何计算到地毯左上角的距离(因为我使用 x 和 y 坐标来绘制它),但不知道如何计算到地毯最近点的距离,例如在地毯底部的中间。

【问题讨论】:

    标签: java path-finding


    【解决方案1】:

    这更像是一个算法问题,而不是 java。你能澄清一下我们掌握的关于地毯的信息吗?我们有地毯的坐标吗?我们有玩家的坐标吗?

    假设您有正方形 A*A 地毯角的坐标,您可以简单地计算出哪个玩家到地毯角或其边的欧几里得距离更短。这可以通过创建地毯拥有的坐标列表来完成。

    请记住这是伪代码,请不要只是将代码复制到您的 IDE 中而因为它没有通过您的测试而感到沮丧。

    所以步骤是:

    1. 创建方形地毯坐标列表
    2. 向该列表添加角
    3. 计算要添加到列表中的地毯两侧的点
    4. 比较玩家之间的最小欧几里得距离和列表中的所有坐标。较低的距离最近。

    假设您有一个单位方形地毯,角在 (1,1), (-1,1), (-1,-1), (1,-1)。

        ArrayList<String> rugCoordinates = new ArrayList<String>();
        //first add all corners
        rugCoordinates.add("(1,1)");
        rugCoordinates.add("(-1,1)");
        rugCoordinates.add("(-1,-1)");
        rugCoordinates.add("(1,-1)");
    

    现在您需要将沿线的点添加到列表中。您可以通过上升/运行获得点之间的斜率,例如,在 (-1,1) 和 (1,1) = 0 斜率之间。

        slope = (yCoordTarget-yCoordSource)/(xCoordTarget-xCoordSource);
        for(int i = xCoordSource; i < xCoordTarget, i++){
            rugCoordinates.add(i, i+slope);
        }
    

    最后比较玩家的最小距离。

        if (findMinEuclideanDistance(player1) < findMinEuclideanDistance(player2)){
            return player1;
        else{
            return player2;
        }
    

    【讨论】:

    • 嘿,非常感谢您的回答,帮助我了解了一些重要的东西。但是有没有办法在不使用数组的情况下做到这一点?关于你的问题。我有每个玩家的 x 和 y,左上角的地毯的 x 和 y。而且我有地毯的长度(所以我在做 xRug + 长度等)
    • 啊,好吧,所以我们假设地毯是直的,并且对角线的角度不正确? arraylist 用于使代码更整洁,更有意义,但你仍然可以在没有它的情况下执行 for 循环。也许 for 循环遍历所有边,每边都有一个单独的 for 循环,并保存所有 4 个边中每个玩家的最小欧几里得距离。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多