这段代码有什么问题?它试图将访问过的坐标标记为1,以便不重新访问它们,然后从水平或垂直目标点添加或减去一个并重复该过程。
public static boolean pathExists(int destX,
int destY, int sourceX, int sourceY) {
if (sourceY == destY && sourceX == destX) {
return true;
}
if ((coordinates[destX][destY] == 0) && isMoveableTo(destX, destY)) {
coordinates[destX][destY] = 1;
return ((pathExists(destX + 1, destY, sourceX, sourceY) && isMoveableTo(destX + 1, destY))
|| (pathExists(destX, destY + 1, sourceX, sourceY) && isMoveableTo(destX, destY + 1))
|| (pathExists(destX - 1, destY, sourceX, sourceY) && isMoveableTo(destX - 1, destY))
|| (pathExists(destX, destY - 1, sourceX, sourceY) && isMoveableTo(destX, destY - 1)));
}
return false;
}
问题在于,它既可以从destX中减去1,又可以同时从destY减去1,尝试对角移动,这是不可能的。
谢谢。