完整的非递归迭代回溯方式的代码c++
时间: 2024-05-04 12:19:01 浏览: 193
以下是一个简单的非递归迭代回溯方式的代码示例:
```c++
#include <iostream>
#include <stack>
using namespace std;
int main() {
// 定义一个矩阵
int maze[5][5] = {
{0, 1, 0, 0, 0},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 0},
{0, 1, 1, 1, 0},
{0, 0, 0, 1, 0}
};
// 定义起点和终点
int start_i = 0;
int start_j = 0;
int end_i = 4;
int end_j = 4;
// 定义栈
stack<pair<int, int>> s;
// 将起点入栈
s.push(make_pair(start_i, start_j));
// 定义一个标志数组,用于记录走过的路径
bool visited[5][5] = {false};
// 开始循环
while (!s.empty()) {
// 取出栈顶元素
int i = s.top().first;
int j = s.top().second;
s.pop();
// 判断是否到达终点
if (i == end_i && j == end_j) {
cout << "找到终点!" << endl;
return 0;
}
// 判断当前位置是否合法
if (i < 0 || i >= 5 || j < 0 || j >= 5 || maze[i][j] == 1 || visited[i][j]) {
continue;
}
// 标记当前位置为已走过
visited[i][j] = true;
// 将当前位置的相邻位置加入栈中
s.push(make_pair(i + 1, j));
s.push(make_pair(i - 1, j));
s.push(make_pair(i, j + 1));
s.push(make_pair(i, j - 1));
}
// 如果到达这里,表示没有找到终点
cout << "未找到终点!" << endl;
return 0;
}
```
该代码实现了一个简单的迷宫求解问题。具体实现方式如下:
1. 定义一个矩阵,表示迷宫的地图。
2. 定义起点和终点。
3. 定义一个栈,将起点入栈。
4. 定义一个标志数组,用于记录走过的路径。
5. 循环遍历栈中的元素,取出栈顶元素。
6. 判断是否到达终点,如果到达终点,输出结果并结束程序。
7. 判断当前位置是否合法,如果不合法,跳过该位置。
8. 标记当前位置为已走过。
9. 将当前位置的相邻位置加入栈中。
10. 如果循环结束,表示没有找到终点,输出结果并结束程序。
阅读全文
相关推荐


















