社区讨论
警示后人(bfs58分)
P1825[USACO11OPEN] Corn Maze S参与者 5已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo2bqsvd
- 此快照首次捕获于
- 2023/10/23 11:14 2 年前
- 此快照最后确认于
- 2023/11/15 20:57 2 年前
如果你也像这个评测一样,那么以下的内容可能对你有帮助。
在常规bfs中,我们会对走过的点进行标注,但是对于这道题,常规的标注方法会出现“传送门坑人”的情况:
PLAINTEXT@W=
##.
W#.
.#.
.#.
.#.
...
这种情况下,如果直接向右走到(2,1),就会被传送到(1,3),并且由于标记无法返回,只能从下方绕一大圈,输出11。此时就不如(1,3)->(1,4)->(1,3)回到(2,1)继续向右。
参考代码:
Cif ('A' <= element.value() && element.value() <= 'Z') { // 传送
point t;
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= width; j++) {
if (map[j][i] == element.value() && (j != element.x || i != element.y))
t = {j, i, element.step};
}
}
element = t;
} else {
walked[element.x][element.y] = true; // 标记
}
CPP回复
共 4 条回复,欢迎继续交流。
正在加载回复...