我正在尝试解决基于二维数组的问题。该数组包含不同种类的元素(共有 3 种可能的种类)。让我们假设类型为 X、Y、Z。
该数组似乎是这样的。请注意,它总是会被完全填满。该图用于说明。
7 | | | | | | |
6 | | | | | | |
5 | | | | | | |
4 | |X|Z|Y|X| |
3 | |Y|X|Y|Y|X|
2 |Y|Y|X|Z|Z|X|
1 |X|X|Y| |X|X|
0 | | | |Z| | |
0 1 2 3 4 5
我正在尝试创建彼此相邻放置的元素集。例如,set1 可能包含位于以下位置的 X 类型元素:(0,1)、(1,1)、(2,2)、(2,3)、(1,4)。类似地,set2 可能包含位于 (3,4)、(3,3)、4,3) 的 Y 类型元素。
问题:给定数组中的任何点,它必须能够将所有元素添加到适当的集合中,并确保没有两个集合包含相同的元素。请注意,仅当遇到超过 2 个相同类型的相邻元素时才会创建一个集合。
此外,如果删除了某个元素子集,则会添加更多元素来替换删除的元素。然后必须重新迭代该数组以创建新集合或修改现有集合。
解决方案:我实现了一个递归解决方案,它会遍历所有相邻元素,例如元素 X (0,1)。然后,在迭代 8 个可能的相邻元素时,它会在出现类型 X 时递归调用自身。
这种解决方案过于暴力且效率低下,尤其是在某些元素被可能不同类型的新元素替换的情况下。在这种情况下,几乎整个数组都必须重新迭代以制作/修改集合,并确保在多个集合中不存在相同的元素。
有没有什么算法可以有效地处理这类问题?我需要一些想法/建议或伪代码的帮助。