想象一个笛卡尔平面,每个Cell对象代表平面中的一个点(该平面将成为迷宫)。在构建迷宫时,我想知道Cell对象是顶点(四个角点)还是边界点(迷宫边缘上的任何单元格,顶点也是边界点)。
我需要知道这一点,以便将相邻单元格添加为特定单元格的邻居(我正在创建具有节点的图结构)。不同的边界对于哪些单元格是邻居有不同的要求(例如右上顶点不能有y + 1或x + 1作为邻居,因为它在迷宫外,而左下顶点不能有y - 1或x - 1)。
我尝试通过一堆if语句来实现这一点,但我觉得这不是一种很好的实践。所以我想问是否有更好的方法来确定点的坐标类型?
以下是我的实现方式:
我需要知道这一点,以便将相邻单元格添加为特定单元格的邻居(我正在创建具有节点的图结构)。不同的边界对于哪些单元格是邻居有不同的要求(例如右上顶点不能有y + 1或x + 1作为邻居,因为它在迷宫外,而左下顶点不能有y - 1或x - 1)。
我尝试通过一堆if语句来实现这一点,但我觉得这不是一种很好的实践。所以我想问是否有更好的方法来确定点的坐标类型?
以下是我的实现方式:
private String typeOfBorderCell(Cell cell){
if (!isBorderCell(cell)){
throw new IllegalArgumentException("cell is not a border cell");
}
double x = cell.getCoordinate().getX();
double y = cell.getCoordinate().getY();
// Vertices
if (x == 0 && y == 0){
return "bottom-left";
}
else if (x == 0 && y == height - 1){
return "top-left";
}
else if (x == width - 1 && y == 0){
return "bottom-right";
}
else if (x == width - 1 && y == height - 1){
return "top-right";
}
// Non-Vertices
else if (x == 0 && (y > 0 && y < height - 1)){
return "left";
}
// and so on for the other three non-vertex borders
}
高度/宽度是迷宫的大小,但由于迷宫坐标从原点(0,0)开始,因此我不得不减去1,因此一个5x5的迷宫其y的最大值为4,x的最大值也为4。
这样做,我将得到总共8个条件语句(使用此方法的方法还需要一个带有8个case的switch语句)。是否有更���效的方法在没有大量条件语句的情况下完成此操作?