ccf 201803-4 棋局评估(Python实现)
一、原题
问题描述
|
试题编号: |
201803-4 |
|
试题名称: |
棋局评估 |
|
时间限制: |
1.0s |
|
内存限制: |
256.0MB |
|
问题描述: |
问题描述 Alice和Bob正在玩井字棋游戏。 输入格式 输入的第一行包含一个正整数T,表示数据的组数。 输出格式 对于每组数据,输出一行一个整数,表示当前局面的得分。 样例输入 3 样例输出 3 样例说明 第一组数据: 数据规模和约定 对于所有评测用例,1 ≤ T ≤ 5。 |
二、题解
三、代码
- 以下提交15分:
num = int(input())
content = []
for i in range(num * 3):
content.append(list(map(int, input().split())))
def get_li(li):
i = 0
narray = []
for i in range(num):
narray.append([])
j = i * 3
for j in range(j, j + 3):
narray[i].append(li[j])
return narray
def judge(li, u=1):
for i in range(3):
if li[i][0] == li[i][1] == li[i][2] == u:
return True
for i in range(3):
if li[0][i] == li[1][i] == li[2][i] == u:
return True
if li[0][0] == li[1][1] == li[2][2] == u:
return True
if li[2][0] == li[1][1] == li[0][1] == u:
return True
return False
def space(li, u=0):
count = 0
for i in range(3):
for j in range(3):
if li[i][j] == u:
count += 1
return count
def dfs(li, u):
max1, min1 = -10, 10
if (space(li)) >= 7: return 0
if u == 1 and judge(li, 2):
return -space(li) - 1
if u == 2 and judge(li, 1):
return space(li) + 1
if (space(li) == 0): return 0
for i in range(3):
for j in range(3):
if li[i][j] == 0:
li[i][j] = u
if u == 1:
max1 = max(max1, dfs(li, 2))
else:
min1 = min(min1, dfs(li, 1))
li[i][j] = 0
if u == 1:
return max1
else:
return min1
for i in get_li(content):
print(dfs(i, 1))
以下提交: