你的代码只计算了空位周围棋子颜色为白色的情况,而没有考虑到黑色棋子的影响。
正确的做法应该是对每个颜色的棋子都进行处理,遍历整个棋盘,分别统计黑棋和白棋总共有多少“气”。具体实现时可以使用深度优先搜索或广度优先搜索算法。
下面给出一个基于搜索的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
|