我有一个由六边形领域组成的地图。在这张地图上,每个领域(我们称之为Hex)都属于某个玩家,并且通过坐标进行定义。
我需要获得某个玩家Hex的List>。这意味着如果我输入一个该玩家拥有的所有Hex数组,我需要获取关于这些Hex哪些是分组在一起的信息。
让我举个例子: 输入->绿色玩家拥有的所有Hex -> List playersHexes 是:{0.0; 0.1; 0.2; 1.0; 1.3; 2.1; 2.3}
输出应该是绿色玩家的"岛屿": {0.0; 0.1; 0.2; 1.0} , {1.3; 2.3} , {2.1} 如何使用递归实现这一点?我能够轻松找到某个Hex的邻居,但这仅限于某个Hex的一次迭代。
任何帮助都将不胜感激 - 具有可工作递归函数的伪代码即可。 谢谢!
我需要获得某个玩家Hex的List>。这意味着如果我输入一个该玩家拥有的所有Hex数组,我需要获取关于这些Hex哪些是分组在一起的信息。
让我举个例子: 输入->绿色玩家拥有的所有Hex -> List playersHexes 是:{0.0; 0.1; 0.2; 1.0; 1.3; 2.1; 2.3}
输出应该是绿色玩家的"岛屿": {0.0; 0.1; 0.2; 1.0} , {1.3; 2.3} , {2.1} 如何使用递归实现这一点?我能够轻松找到某个Hex的邻居,但这仅限于某个Hex的一次迭代。
//playersHexes are all the hexes that a player owns
//map is the current map used - contains information about certain hexes
//map is not a HashMap! It's my custom object..
private void findIslands(List<Hex> playersHexes, Map map)
{
List<Hex> island = new ArrayList<Hex>();
int curPos = 0;
for(Hex hex : playersHexes){
island.add(hex);
//remove the hex if it's allready gone through it?
playersHexes.remove(curPos);
List<Hex> neighbours = map.getNeighboursOf(hex);
for(Hex neighbour : neighbours)
{
}
//hexList is the output place - the target is to fill hexList with
//islands(List<Hex>) of hexes..
this.hexList.add(curPos, island);
curPos++;
}
}
任何帮助都将不胜感激 - 具有可工作递归函数的伪代码即可。 谢谢!
hexList.add(new ArrayList<List<Hex>>);
,但是如何将当前六边形添加到新创建的岛屿中呢?请您编辑这些信息,好吗? - DropoutABCDE
,其中每个字母代表一个六边形,并且它们排成一条直线。假设六边形B
、C
和D
属于玩家 1。假设我们从访问六边形B
开始,因此我们创建了第一个仅包含B
的岛屿。然后,我们访问六边形D
,得出结论它与B
不相邻,因此我们创建了一个新的岛屿,仅包含D
。接着,我们访问C
并得出它与B
相邻,因此我们将其添加到该岛屿中。现在我们有了两个岛屿:一个包含B
和D
,另一个仅包含D
。 - Alderath0,0 -> 0,1 -> 0,2 -> 0,3 -> 1,0 -> 1,1 -> 1,2 -> 1,3 -> 2,0 -> 2,1 -> 2,2 -> 2,3
。如果您的算法应用于OP的示例中的红色玩家,则会创建两个岛屿。 - Alderath