Java中3D数组的Dijkstra算法

时间:2015-02-04 11:41:39

标签: java arrays algorithm

我做了三维数组,我想搜索从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)

1 个答案:

答案 0 :(得分:0)

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

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

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