【问题标题】:Stack for backtracking maze回溯迷宫堆栈
【发布时间】:2015-05-17 09:07:34
【问题描述】:

对于迷宫生成的算法DFS:

1) 每当有路可走时,我将堆栈推入后,堆栈值是否应该改变?

例如下面的 5x5 迷宫:

0, 0, 0, 0, 0

0, 1, 0, 0, S

0, 1, 1, 1, 1

0, D, 0, 0, 0 

0, 0, 0, 0, 0

假设从源代码我向下移动了一步(CurrentCell)

堆栈将推入坐标 (5,2)(当前源位置)

然后当我到达 (5,3) 时,currentCell 将成为 Source。 (5,3)

我说的对吗?

所以当源移动到下一个左侧路径时,堆栈将推入当前坐标,即 (5,3) 以此类推,直到它到达死胡同而不是目的地。

所以按照上面的例子:

堆栈将首先压入值

堆栈(0) (5,2) 堆栈(1) (5,3)

。 . . .

问题是,我应该如何推入 x 和 y?因为目前的问题是,即使我推入 x 和 y,x 和 y 仍然保持在原始值,而不是不断更新。这就是为什么我的回溯不起作用的原因,我猜。

代码:

(random == 3) //To check for bottom neighbor
                        {
                            if (y+ 2 < column) //In case the column overshots
                            {

                                {
                                    maze[x][y+ 1].setValue(1); //New Path Set as 1
                                    myStack.push(maze[x][y]);
                                    y= y+ 1;
                                    }
                               }
                           }

【问题讨论】:

    标签: c++ algorithm stack maze


    【解决方案1】:

    事实证明我是对的。

                    maze[x][y] = myStack.top();
                    myStack.pop();
                    cout << "Array X is : " << maze[x][y].getX();
                    cout << "Array Y is : " << maze[x][y].getY();
    

    我只需要弹出并检查我采取的路线是否回溯。感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      相关资源
      最近更新 更多