[[0, 0, 0].....] 从 0,0 开始,如果遇到1则进入递归: 递归结束条件: 四周都是 0或边界。 结束时将搜索到的人数添加。 未结束时根据四周的情况进入相同的递归。
(court)
| 42 | (x+1, y-1)) |
| 43 | |
| 44 | def getFootballFans(court): |
| 45 | """ |
| 46 | [[0, 0, 0].....] |
| 47 | 从 0,0 开始,如果遇到1则进入递归: |
| 48 | 递归结束条件: |
| 49 | 四周都是 0或边界。 |
| 50 | 结束时将搜索到的人数添加。 |
| 51 | 未结束时根据四周的情况进入相同的递归。 |
| 52 | """ |
| 53 | |
| 54 | fans_groups = [] |
| 55 | x = 0 |
| 56 | y = 0 |
| 57 | |
| 58 | x_length = len(court[0]) |
| 59 | y_length = len(court) |
| 60 | |
| 61 | def helper(x, y, result=0): |
| 62 | nonlocal court |
| 63 | Xy = makeAroundXY(x, y) |
| 64 | for i in Xy: |
| 65 | try: |
| 66 | if i[0] < 0 or i[1] < 0: |
| 67 | continue |
| 68 | |
| 69 | if court[i[1]][i[0]] == 1: |
| 70 | court[i[1]][i[0]] = 0 |
| 71 | result += 1 |
| 72 | t = helper(i[0], i[1], 0) |
| 73 | result += t |
| 74 | except IndexError: |
| 75 | continue |
| 76 | else: |
| 77 | return result |
| 78 | |
| 79 | |
| 80 | for y in range(y_length): |
| 81 | for x in range(x_length): |
| 82 | if court[y][x] == 1: |
| 83 | court[y][x] = 0 |
| 84 | fans_groups.append(helper(x, y, 1)) |
| 85 | |
| 86 | |
| 87 | |
| 88 | if not fans_groups: |
| 89 | return (0, 0) |
| 90 | |
| 91 | return (len(fans_groups, max(fans_groups))) |
| 92 | |
| 93 | getFootballFans(test) |