酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

题目描述 一个5×6的迷宫样例如下: 要求给出从起点(1,1)到终点(3,4)的路径。 为了处理方便,保证最外圈全都为障碍物。 扩展到一般情况,一个m×n的迷宫,要求输出从起点(1,1)到终点(m-2,n-2)的路径。 测试实例保证路径是唯一的。 该题要求自行设计一个栈来做。如果设计的是顺序栈,则保证栈的大小不超过200个元素。 输入 第一行为两个整数m和n,表示m×n的迷宫。 接下来有m行,每行有n个数(n个数之间用空格间隔,值=0表示可以通行,值=1表示为障碍物) 输出 输出从起点到终点的路径,每个坐标占一行,坐标间的行号和列号用一个空格间隔。具体格式可参考样例。 样例输入 复制 5 6 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 0 0 1 1 1 1 1 1 1 样例输出 复制 1 1 1 2 2 2 3 2 3 3 3 4

以下是使用 C++语言实现的使用自定义栈来解决迷宫路径问题的代码: ```cpp #include <iostream> using namespace std; // 定义一个坐标结构体 struct Position { int row; int col; }; // 定义栈的最大容量 const int MAX_SIZE = 200; // 自定义栈 class Stack { private: Position data[MAX_SIZE]; int top; public: Stack() { top = -1; } // 入栈 void push(Position p) { if (top < MAX_SIZE - 1) { top++; data[top] = p; } else { cout << "Stack Overflow!" << endl; } } // 出栈 Position pop() { if (top >= 0) { Position p = data[top]; top--; return p; } else { cout << "Stack Underflow!" << endl; return {-1, -1}; } } // 判断栈是否为空 bool isEmpty() { return top == -1; } }; // 查找路径函数 void findPath(int m, int n, int maze[][MAX_SIZE]) { Stack s; Position start = {1, 1}; Position end = {m - 2, n - 2}; s.push(start); while (!s.isEmpty()) { Position current = s.pop(); // 到达终点 if (current.row == end.row && current.col == end.col) { cout << current.row << " " << current.col << endl; return; } // 尝试向右移动 if (current.col + 1 < n && maze[current.row][current.col + 1] == 0) { Position right = {current.row, current.col + 1}; s.push(right); maze[current.row][current.col + 1] = 1; // 标记已访问 cout << current.row << " " << current.col << endl; } // 尝试向下移动 if (current.row + 1 < m && maze[current.row + 1][current.col] == 0) { Position down = {current.row + 1, current.col}; s.push(down); maze[current.row + 1][current.col] = 1; // 标记已访问 cout << current.row << " " << current.col << endl; } // 尝试向左移动 if (current.col - 1 >= 0 && maze[current.row][current.col - 1] == 0) { Position left = {current.row, current.col - 1}; s.push(left); maze[current.row][current.col - 1] = 1; // 标记已访问 cout << current.row << " " << current.col << endl; } // 尝试向上移动 if (current.row - 1 >= 0 && maze[current.row - 1][current.col] == 0) { Position up = {current.row - 1, current.col}; s.push(up); maze[current.row - 1][current.col] = 1; // 标记已访问 cout << current.row << " " << current.col << endl; } } cout << "No path found!" << endl; } int main() { int m, n; cin >> m >> n; int maze[m][MAX_SIZE]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> maze[i][j]; } } findPath(m, n, maze); return 0; } ``` 这个程序首先定义了一个自定义的栈来存储走过的路径节点,然后通过深度优先搜索的方式来寻找从起点到终点的路径,并在找到路径时输出路径节点的坐标。 [2024-11-03 03:57:16 | AI写代码神器 | 946点数解答]

相关提问