我在 UOJ 上 AC 了此题,源代码:http://uoj.ac/submission/394724
这题在 UOJ 上是单组数据,但是我把单组数据改成多组数据时,交到 UVA 上却出错了。代码在这里:http://uoj.ac/submission/394725
其中主要需要修改的是读入部分:
bool read() {
scanf("%d%d%d", &n, &m, &k);
if (n == 0) return false;
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
char c;
std::cin >> c;
if (c == 'S') start = point(i, j);
if (c == '*') a[i][j] = Wall;
else a[i][j] = Unknown;
}
return true;
}
这样的写法会导致 TLE,而把前面一段换成 if (scanf("%d%d%d", &n, &m, &k) != 3 || n == 0) return false;
时会导致 WA。
UOJ 上有刘汝佳的经过修改后可以在 UOJ 上通过的标程:http://uoj.ac/submission/105789。我也把这份代码中的读入中的 main()
函数改成这样,再把注释掉的 memset()
语句去掉注释交过,但是也 WA 了。请问我还可能有什么没有注意到的地方?
我是这样修改 main()
函数的:
while (Readin()) {
Initialize();
Judge();
Match();
}