擅长:python、mysql、java
<p>以下实施应有效:</p>
<pre><code>def countArea(map, row, col, key=None, seen=None):
if key is None:
key = map[row][col]
if seen is None:
seen = set()
seen.add((row, col)) # mark this location as visited
n = 1
for dy, dx in [(0, 1), (1, 0), (-1, 0), (0, -1)]:
r, c = row + dy, col + dx
if r < 0 or r >= len(map) or c < 0 or c >= len(map[0]): # check boundaries
continue
# only increment and recurse if key matches and we haven't already visited
if map[r][c] == key and (r, c) not in seen:
n += countArea(map, r, c, key, seen)
return n
</code></pre>
<p>示例:</p>
^{pr2}$
<p>请注意,这假设具有相同键且仅在对角线处接触的区域应视为独立的,例如,对于以下映射<code>countArea(map, 0, 0)</code>和<code>countArea(map, 1, 1)</code>都将返回1:</p>
<pre><code>A.
.A
</code></pre>
<p>另外,您不应该使用<code>map</code>作为变量名,因为它将屏蔽内置的<code>map()</code>函数。在</p>