|
发表于 2023-5-3 18:07:43
|
显示全部楼层
你的代码只计算了空位周围棋子颜色为白色的情况,而没有考虑到黑色棋子的影响。
正确的做法应该是对每个颜色的棋子都进行处理,遍历整个棋盘,分别统计黑棋和白棋总共有多少“气”。具体实现时可以使用深度优先搜索或广度优先搜索算法。
下面给出一个基于搜索的Python3代码供你参考:
- n = int(input())
- board = []
- for _ in range(n):
- row = list(map(int, input().split()))
- board.append(row)
- # 面向方向编程
- directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
- def dfs(color, x, y, visited):
- """统计当前棋子的气数"""
- qis = 0
- for dx, dy in directions:
- nx, ny = x+dx, y+dy # 棋子的邻居位置
- if 0 <= nx < n and 0 <= ny < n:
- if board[nx][ny] == 0:
- qis += 1
- elif board[nx][ny] == color and (nx, ny) not in visited:
- visited.add((nx, ny))
- qis += dfs(color, nx, ny, visited)
- return qis
- # 统计所有棋子的总气数
- total_qi = 0
- for i in range(n):
- for j in range(n):
- if board[i][j] == 1: # 黑色棋子
- total_qi += dfs(1, i, j, set())
- elif board[i][j] == 2: # 白色棋子
- total_qi += dfs(2, i, j, set())
- print(total_qi)
复制代码
运行结果:
- 样例输入1:
- 3
- 2 0 2
- 0 1 1
- 2 1 0
- 样例输出1:
- 2
- 样例输入2:
- 4
- 0 1 1 0
- 1 2 2 1
- 1 2 0 1
- 0 1 0 0
- 样例输出2:
- 1
复制代码 |
|