我应该使用什么样的堆栈数据结构?

bttbmeg0  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(423)

我在写一个解迷宫的算法,我有一个叫做char[][]迷宫的迷宫。它的元素是这样的;

{1,1,1,1,1,1, ..},
{1,0,1,0,1,1, ..},
{1,0,0,1,0,1, ..}, ...

共有13行17列。我必须使用块数据结构来解决它。根据我在脑海中设置的算法,我需要在这个堆栈中存储可导航路径的索引值。例如,根据上述迷宫:

0,0
0,1
0,2
0,3
0,4
1,4
1,5
2,5...

在前面的示例中,我经常保留一个整数,所以在实现堆栈构造时使用了这样的结构。

public class Stack {
    int topOfStack;
    int capacity;
    int[] Stack;

    public Stack(int capacity) {
        this.capacity = capacity;
        Stack = new int[capacity];
        topOfStack = -1;
    }

    void push(int element)
    {
        if(topOfStack == capacity){
            System.out.println("Stack Overflow...");
        }
        else{
            topOfStack++;
            Stack[topOfStack] = element;
        }
    }
}

我的问题就是这个。如何修改迷宫求解程序的堆栈结构?如果我需要再次声明,我必须在堆栈中保留坐标或类似的东西,而不是整数。谢谢。

9gm1akwq

9gm1akwq1#

您可以创建一个名为coordinates的新类对象。这个类将有两个主要参数,即x和y。然后你可以用这个坐标对象来代替一个简单的整数。
您正在构建的结构可以是通用的,并且包含比基本结构更复杂的结构,这就是您在本示例中看到的

gywdnpxw

gywdnpxw2#

简单地说,可以使用2d数组来存储坐标:

public class Stack {
    int topOfStack;
    int capacity;
    int[][] stack;

    public Stack(int capacity) {
        this.capacity = capacity;
        stack = new int[capacity][2];
        topOfStack = -1;
    }

    void push(int x, int y)
    {
        if(topOfStack == capacity){
            System.out.println("Stack Overflow...");
        }
        else{
            stack[++topOfStack] = new int[] { x, y };
        }
    }

    int[] pop() {
        if (topOfStack < 0) {
            System.out.println("Stack is empty");
            return null;
        }
        return stack[topOfStack--];
    }
}

相关问题