我有一些具有某种状态的对象,就像这里一样。
1 1 1 1 0 1
1 0 1 1 0 1
0 0 1 1 0 0
x x x x x x
0 0 1 1 0 0
0 0 1 1 0 0
1 0 0 0 0 1
1 1 1 1 1 1
x是对象的差异状态,我想将状态更改为2,所有1个触摸x和其他1个触摸1触摸x等等。所以我的结果应该是这样的。
2 2 2 2 0 1
2 0 2 2 0 1
0 0 2 2 0 0
x x x x x x
0 0 2 2 0 0
0 0 2 2 0 0
1 0 0 0 0 1
1 1 1 1 1 1
实际上我想返回应该从1更改为2的对象数组。 我虽然关于递归函数,函数会检查触摸对象状态是否等于1,如果它是更改状态并执行它以触摸状态为1的对象。我无法想象这个函数可能看起来如何,我从未使用过递归:/
如果重要的话我正在使用TypeScript。
对我来说,你的帮助将是圣杯。
答案 0 :(得分:0)
您需要从x
单元格开始Flood fill。
递归实现非常简单(四向连接):
Flood-fill (node, target-color, replacement-color):
1. If target-color is equal to replacement-color, return.
2. If the color of node is not equal to target-color, return.
3. Set the color of node to replacement-color.
4. Perform Flood-fill (one step to the south of node, target-color, replacement-color).
Perform Flood-fill (one step to the north of node, target-color, replacement-color).
Perform Flood-fill (one step to the west of node, target-color, replacement-color).
Perform Flood-fill (one step to the east of node, target-color, replacement-color).
5. Return.
但也存在非递归实现。