java - 在 Java 中创建不同边缘时链接网格图块的有效方法
问题描述
有一个网格。
static Double [][] myTiles = new Double[row][column];
目标是将每个图块与相邻的图块连接起来。比较这对之间的值,构建图块之间的链接以创建给定网格的最小生成树。
以下是我对这个问题的初步处理:
九(9)组瓷砖被识别。
这些组具有相同的逻辑和相邻方格的相同可用性。
对于网格中的每个单元格,我决定检查上方、下方、左侧和右侧的单元格。某些单元格在位于网格边缘时无法执行所有检查。下面是每种类型的图块的移动表示。
我当前的解决方案是一个嵌套的 for 循环,其中包含以下if-else 语句:
if ( row == 0 && column == 0) {
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column)); }
else if ( row == 0 && ( column > 0 && column < myTiles.length ) ) {
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column)); }
else if ( row == 0 && column == myTiles.length ) {
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column)); }
else if ( ( row > 0 && row < myTilese[row].length ) && column == 0 ) {
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column)); }
else if ( row == myTilese[row].length && column == 0 ) {
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column)); }
else if ( row == myTilese[row].length && ( column > 0 && column < myTiles.length ) ) {
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column)); }
else if ( row == myTilese[row].length && column == myTiles.length ) {
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column)); }
else if ( ( row > 0 && row < myTilese[row].length ) && column == myTiles.length ) {
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));}
else {
mySortingQueue.offer(createEdgeNorth(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeEast(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeWest(myEdge, myTiles, row, column));
mySortingQueue.offer(createEdgeSouth(myEdge, myTiles, row, column));}
上述逻辑至少创建两个链接,最多创建四个。在构建最小生成树时,需要排序很多重复项。
是否有一种雄辩的方式来表示上述 if-else 块?
解决方案
这要简单得多:
if(row > 0) {
// north
}
if(row < height) {
// south
}
if(column > 0) {
// west
}
if(column < width) {
// east
}
显然,这假设您至少有一个 2x2 网格。
我认为您过度考虑了您的实现,但是您发布的代码可以很容易地重构以制作一个好的测试用例。
推荐阅读
- node.js - 无法使用 nodeJS 连接 MongoDb
- .net-core - AcquireTokenSilentAsync 无法访问在 azure AD 中注册的 Web api
- java - 如何将此 TextView 的实例状态保存在片段中?
- php - php 我得到未捕获的错误函数名称必须是一个字符串
- javascript - 如何使用 alt 标签制作可访问、响应迅速、灵活的蒙版图像
- javascript - 如何在切换选项卡时解决 highchart 中的 xaxis 更新问题
- android - DexClassloader 在 Android 9 Pie 中是否仍然有效?
- android - SQLiteConnection,数据库被泄露,快速触发更新后
- html - HTML 根链接
- macos - 错误 ITMS-90283:配置文件无效。捆绑包中包含的配置文件无效 [缺少代码签名证书]