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

What kind of Stack data structure should I use?

我正在编写一个解决迷宫的算法,我有一个名为 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;
        }
    }
}

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

您可以创建一个名为 Coordinates 的新 class 对象。 此 class 将有两个主要参数,即 X 和 Y。 然后你可以制作一个用这个坐标对象而不是简单的整数填充的卡。

您正在构建的卡住可以是通用的并且包含比基本结构更复杂的结构,这就是您在此示例中看到的内容

简单来说,可以用二维数组来存储坐标:

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--];
    }
}