因为这道题的驷马输入——像正常坐标系一样,(1,1) 代表图的左下角。
所以我们需要把第一重循环反着跑,因为这层代表每列上的数据。
像这样:
int main() {
scanf("%d%d%d%d", &m, &n, &mx, &my);
for(int i = n; i >= 1; i --)
for (int j = 1; j <= m; j ++) {
char c;
scanf(" %c", &c);
tsp[i][j] = (c == '*');
}
}
当然,如果你用了别的操作来转化这个坐标系的问题,当我什么都没说。
只要我们反着输入,就可以把这张图在纵轴上翻转 180°(你可以看做是做了一个镜像的操作,将这个矩阵上下翻转了),也就变成了题目中所描述的坐标系样式。于是我们的 mx 和 my 就可以正常使用。
……吗?
no no no no,这道题输入的逆天之处还远远没有完全体现出来
当我改成了以上这种输入方式后,我发现我仍然会寄在原来的地方。于是我找来了旁边的队友帮忙。
令人震惊的是,输入的时候,我们需要把 i 和 j 反过来。这个问题是伟大的队友帮我调这道题的时候告诉我的。
当然,在听到这个消息后,我百思不得其解。然后我把这个数组输出了。于是,我惊奇地发现,这样输入竟然跟正确输入不一样。
但是,这样输入的确是能 AC 的,所以它就是正确的。
下面贴上我的输入。
当然,这样输入很可能是错误的。如果有 dalao 知道这是怎么回事,请您在本帖下回复我,也让此后写这道题的 OIER 们少走一些弯路 QAQ。
int main() {
scanf("%d%d%d%d", &m, &n, &mx, &my);
for(int i = n; i >= 1; i --)
for (int j = 1; j <= m; j ++) {
char c;
scanf(" %c", &c);
tsp[j][i] = (c == '*');
}
q.push(make_pair(mx, my));
bfs();
printf("%d", ans);
}