【发布时间】:2020-12-04 17:42:28
【问题描述】:
有一个网格。
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 块有没有一种雄辩的方式来表示?
【问题讨论】:
-
您经常使用 condition &&。我会使用嵌套的 if 语句将条件组合在一起。
-
它将相似的代码组合在一起。这使得可以用新方法替换哪些代码位变得更加明显。然而,这并没有硬性规定。你要求推荐更雄辩的代码,我给了你一个。如果您想了解更多信息,请在网上 Google。
标签: java multidimensional-array grid row