社区讨论
求助万能的谷民(违规紫衫)
灌水区参与者 5已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lzgpvlne
- 此快照首次捕获于
- 2024/08/05 16:15 2 年前
- 此快照最后确认于
- 2024/08/05 16:58 2 年前
给为帮我看一下为什么总是运行出错?
(被压下去了,再发一遍)
CPP#include<bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, -1, 1};
int dy[] = {-1, 1, 0, 0};
int main() {
// ...(变量声明和输入部分)
int n, m, start_x, start_y, end_x, end_y, q[10010][3], h = 1, t = 1, b[200][200] = {0};
char a[200][200];
cin >> n >> m >> start_x >> start_y >> end_x >> end_y;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
// 初始化队列,设置入口坐标
q[1][0] = start_x;
q[1][1] = start_y;
q[1][2] = 0; // 起点的步数为0
b[start_x][start_y] = 1; // 标记起点已访问
// 开始广度优先搜索
while (h <= t) {
// 打印当前队列头部的坐标
cout << "处理队列头部: (" << q[h][0] << ", " << q[h][1] << ")" << endl;
// 遍历四个可能的移动方向
for (int i = 0; i < 4; i++) {
int nr = q[h][0] + dx[i], nc = q[h][1] + dy[i];
// 打印尝试扩展的坐标
cout << "尝试扩展到: (" << nr << ", " << nc << ")" << endl;
// 检查新位置是否在地图内、是否可走以及是否未访问过
if (nr >= 0 && nr <= n && nc >= 0 && nc <= m && a[nr][nc] == '.'&&b[nr][nc]==0) {
t++;
q[t][0] = nr;
q[t][1] = nc;
q[t][2] = q[h][2] + 1;
b[nr][nc] = 1; // 更新步数
// 打印添加到队列的坐标和步数
cout << "添加到队列: (" << nr << ", " << nc << ") 步数: " << q[t][2] << endl;
} else {
// 打印不可扩展的坐标
cout << "无法扩展到: (" << nr << ", " << nc << ")" << endl;
}
}
h++; // 移动头指针,处理下一个队列元素
}
// 如果没有找到路径,打印队列的状态
cout << "队列耗尽,未找到路径。" << endl;
for (int i = 1; i <= t; i++) {
cout << "队列元素 " << i << ": (" << q[i][0] << ", " << q[i][1] << ", " << q[i][2] << ")" << endl;
}
cout << -1 << endl;
return 0;
}
//10 10
//1 1
//9 10
//##########
//#..#######
//##..######
//###..#####
//####.#####
//####.#####
//####..####
//#####...##
//#######...
//##########
thx
回复
共 8 条回复,欢迎继续交流。
正在加载回复...