我正在开发一个应该是迷宫求解器的项目。我的代码几乎完成,除了一位。我需要得到我的数组列表中的一个点的索引,但我有一个布尔值调整我需要的点。我需要能够得到满足布尔值的点的索引为true,但我不太清楚如何做到这一点。我已经附上了下面的一些代码。我希望它能告诉你我的意思!
这是布尔值,其中包含该点的条件:
public static boolean adjacent( Point p1, Point p2 )
{
int pointX1 = p1.getX();
int pointX2 = p2.getX();
int pointY1 = p1.getY();
int pointY2 = p2.getY();
while (pointY1 == pointY2)
{
if(pointX1 + 1 == pointX2)
{
return true;
}
else if(pointX1 - 1 == pointX2)
{
return true;
}
}
while (pointX1 == pointX2)
{
if(pointY1 + 1 == pointY2)
{
return true;
}
else if(pointY1 - 1 == pointY2)
{
return true;
}
}
return false;
}
这是我到目前为止我的数组列表:
public static boolean isSolvable( ArrayList<Point> points )
{
ArrayList<Point> second = new ArrayList<Point>();
second.add(points.get(0));
points.remove(0);
while(second.size() >= 1)
{
//if second contains adjacent point. (Add adjacent to array list, and subtract from other array list[point])
if(points.contains(adjacent(second.get(0), points.get(0))) == true)
{
}
}
return false;
}
答案 0 :(得分:1)
据我所知,您的adjacent(Point, Point)
方法存在一个主要问题。而是使用while
(我不知道你为什么要在这里使用它们)将它们改为if
s:
if(pointY1 == pointY2)
{
if(pointX1 + 1 == pointX2
|| pointX1 - 1 == pointX2)
return true;
}
if(pointX1 == pointX2)
{
if(pointY1 + 1 == pointY2
|| pointY1 - 1 == pointY2)
return true;
}
编辑: 正如@Lars所说,您可以在单行功能中将其写为:
return Math.abs(p1.getX() - p2.getX()) + Math.abs(p1.getY() - p2.getY()) == 1;
另外,我会尝试回溯,贪婪,甚至是分支定界算法来解决你的迷宫。