我需要为一个方法编写一些代码,该方法将返回我正在处理的java项目中相互接触的对象的数量这可能很难让你的头周围,所以这里是一个视觉的例子。
其中浅灰色的正方形是起点(它需要能够是任何一个正方形),任何有颜色的正方形都是完全相同对象(相同代码)的副本;我需要能够找到任何给定图案中的正方形数量,只要它们接触到另一个如果我数对了,这个会返回42,因为那是彩色方块的数目。
我可以访问一些方法,这些方法将检查块的上方、下方和任意一侧,并返回布尔值,但它们只能看到上方1、下方1和两侧各1个。我认为这需要引起某种连锁反应。在其他街区检查1上面,下面,和他们自己的侧面。具体来说,这将用java编写,但更多的是一个算法/数学问题。

最佳答案

Create two lists - you can call them open and closed.
Add the start square to the open list.
While the open list is not empty:
  Remove one of the objects from the open list.
  Add this object to the closed list.
  For each of the 4 addjacent squares to this object:
    If the square is not in the open or closed lists and is the type you are trying to find add this square to the open list.
The size of the closed list is your answer.

由于您似乎在平面上存储了对同一对象的多个引用,而不是在每个位置存储不同的对象,因此检查列表以查看对象是否已在列表中将不起作用。
解决方法之一是用两个与平面大小相同的布尔数组替换列表,而不是从列表中添加或删除对象,而是将布尔值与正在处理的正方形在同一位置翻转为true或false。
另一种方法是为每个网格位置创建不同的对象,并给它们另一个变量来判断它们是否是您要查找的类型,而不是查找同一个对象。
第三种方法是将表示平面位置的对象添加到列表中,而不是添加在该位置找到的对象。

09-28 03:43
查看更多