因为准备考研,于是希望平时练练手,于是去了ZOJ刷题。第一题还是比较简单的,只是需要代码规范。但是第二题着实让人头痛(当然一定是因为我太菜了。。。),后来在参考了两篇博主的解题思路后,又调试了一上午的bug,方才得出了现在的Python3代码。
可是不知道为什么在改为Python2代码后,提交会报错,说是错误答案,于是直接copy了第一篇博主的代码才提交成功了,但是鄙人觉得这个题的确锻炼了我的一些编程逻辑思维吧,所以写篇博客来做个记录,方便以后查阅复习。
#!/user/bin/python3
# -*- coding:utf-8 -*-
#@Date :2018/10/11 11:50
#@Author :Syler
def consider(j, k):
global q
#up
for i in range(j-1, -1, -1):
if q[i][k] == '*':
return 0
if q[i][k] == 'X':
break
#down
for i in range(j+1, len(q)):
if q[i][k] == '*':
return 0
if q[i][k] == 'X':
break
#left
for i in range(k-1, -1, -1):
if q[j][i] == '*':
return 0
if q[j][i] == 'X':
break
#right
for i in range(k+1, len(q)):
if q[j][i] == '*':
return 0
if q[j][i] == 'X':
break
return 1
def DFS(index, current):
global maxCount
global q
j = index // len(q)
k = index % len(q)
if current >= maxCount:
maxCount = current
if index >= len(q) * len(q):
return
if q[j][k] == '.' and consider(j, k):
q[j][k] = '*'
DFS(index + 1, current+1)
q[j][k] = '.'
else:
DFS(index + 1, current)
num = int(input())
i = 0
q = []
maxCount = 0
current = 0
while num:
string = input()
q.append(list(string))
i += 1
if i == num:
for j in range(num):
for k in range(num):
index = j * num + k
DFS(index, current)
print(maxCount)
i = 0
q = []
maxCount = 0
current = 0
num = int(input())
参阅资料:
https://blog.csdn.net/zxy_snow/article/details/5952668
https://blog.csdn.net/rongyongfeikai2/article/details/7301408
欢迎关注微信公众号:达康的编程之旅