【问题标题】:Dijkstra algorithm for 3D array in JavaJava中3D数组的Dijkstra算法
【发布时间】:2015-02-04 11:41:39
【问题描述】:

我做了三维数组,我想搜索从y点到x点的最短路径。我不知道我应该使用什么算法(Dijkstra或 A*)。 移动可以-上下左右

public class Test {
    public static void main(String[] args) {
        String[][][] Station = new String[5][5][5];
        String[] p = {"I","II","III","IV","V"};
        String[] s = {"a","b","c","d","e"};
        String[] po = {"1","2","3","4","5"};

        fillArray(Station,p,s,po);

        String x = Station[3][0][2];
        String y = Station[3][0][2];
    }

    static void fillArray(String[][][] Station, String[] p,String[] s,String[] po) {
        for (int i = 0; i < 5; i++) {
            for (int k = 0; k < 5; k++) {
                for (int g = 0; g < 5; g++) {
                    Station[i][k][g] = p[i];
                    Station[i][k][g] += s[k];
                    Station[i][k][g] += po[g];
                }
            }
        }
    }
}

总结一下我想以最短的方式在控制台中打印(例如 IIIa2,IIa2)

【问题讨论】:

  • up down left right 够三个维度吗?你的距离/成本函数是什么?最短路径在哪里开始和结束?
  • 我不明白,如果你只有四种移动类型,这个3D怎么样?你也必须有来回!
  • 对不起,我忘记了。是的,可以上下左右移动!

标签: java arrays algorithm


【解决方案1】:

基本上你试图找到的是所谓的Minimum Spanning Tree,它可以通过几种算法来完成(例如Dijkstra's algorithm)。

尽管您当前对运动的描述仅暗示二维空间,但另一个问题是,您没有说明“最短路径”的含义。如果您只想从 A 点 (x1,y1,z1) 到 B 点 (x2,y2,z3) 没有任何障碍物和/或运动权重(例如,在 X 中移动使用更多“力量”),最快的方式从 A 到 B 只是沿对角线移动(近似于 X、Y、Z 的连续移动),直到到达指定位置的水平。

如果您有任何行动限制,例如通过障碍物,您必须将每个点的允许移动映射到附加“搜索”图的顶点。 Dijkstras algorithm 的文章有一个很好的illustration 用于该类型的搜索。请注意,搜索将非常耗费时间和内存,因为如果您想找到真正的最小值,则必须检查每个顶点。

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多