林品逸
(hyacinth_lpy)
2024 年10 月 2 日 07:51
1
1. 扫墓
题目背景
紧跟时事 ,zzy @周子寓 因故离世,他的同学们非常伤心,于是打算在国庆假期去扫zzy的墓。
题目描述
zzy的同学们在扫墓的路上遇到了一个 n\times m 的迷宫,迷宫里#
是墙,.
是空地,Z
是zzy的墓,@
表示同学们所在的位置。但是不幸的是,迷宫里出现了许多土匪,经过他们的所在格需要交一定的过路费,否则就无法通过那个格子。某数字(1~9)
表示土匪格,数字表示要交的过路费,而zzy的同学们只带了 k 元钱,问能不能到zzy的墓,如果能,输出最小步数和这种走法剩余的钱,否则,如果是因为没钱,输出Have no money.
,其他情况,输出Can't go.
。
输入格式
第一行三个整数 n,m,k ,表示迷宫的长和宽以及同学们带的钱。
第 2~n+1 行,每行 m 个字符,表示迷宫,含义如题目描述所示。
输出格式
如果能到达,输出最小步数和这种走法剩余的钱,中间用空格隔开。
否则,如果是因为没钱,输出Have no money.
,其他情况,输出Can't go.
。
样例输入1
3 3 2
#Z#
1.#
#1@
样例输出1
3 1
样例输入2
3 3 2
#Z#
1##
#1@
样例输出2
Can't go.
样例输入3
3 3 2
#Z#
1.#
#3@
样例输出3
Have no money.
注:同学们只能往上下左右四个方向走。
欢迎挑战!
6 个赞
章嗣昂
(360安全卫士)
2024 年10 月 3 日 08:25
4
#include < iostream >
#include < queue >
char mz[100][100];
int vis[100][100], dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
struct Node {
int x, y, c;
};
std::queue q;
int main() {
int n, m, k, sx, sy;
scanf(“%d%d%d”, &n, &m, &k);
for (int i = 0; i < n; i ++ ) {
for (int j = 0; j < m; j ++ ) {
std::cin >> mz[i][j];
if (mz[i][j] == ‘@’) {
sx = i, sy = j;
}
}
}
q.push({sx, sy, 0}), vis[sx][sy] = 1;
while (!q.empty()) {
Node cur = q.front();
q.pop();
for (int i = 0, nx, ny, nc; i < 4; i ++ ) {
nx = cur.x + dx[i], ny = cur.y + dy[i], nc = cur.c;
if (nx < 0 || nx >= n || ny < 0 || ny >= m || vis[nx][ny] || mz[nx][ny] == '#') {
continue;
}
if (mz[nx][ny] >= '1' && mz[nx][ny] <= '9') {
nc += mz[nx][ny] - '0';
if (nc > k) {
printf("Have no money.");
return 0;
}
}
if (mz[nx][ny] == 'Z') {
printf("%d %d", cur.c + 2, k - nc);
return 0;
}
q.push({nx, ny, nc});
vis[nx][ny] = 1;
}
}
printf(“Can’t go.”);
return 0;
}
应该是个 \color{green}Wonderful\,\,\,Answer
改进建议:添加数据范围
{\LARGE 1\le n,m,k\le 114514}
4 个赞
周子寓
(zzy10124)
2024 年10 月 6 日 09:15
14
@阚宇阳 @杨竣喆
你™礼貌吗?
@林品逸
我还没死透呢
1 个赞
周子寓
(zzy10124)
2024 年10 月 6 日 09:17
16
我不知道老师什么时候把我号注销,在那之前我先活一小下
1 个赞
Dalton
(论管吉祥物)
2024 年10 月 6 日 13:18
17
啊,为啥要注销你啊,你也没有贾中正,金杭东他们一样刷分啊
2 个赞