如何解决2020 CCC J5/Q2 密室逃脱PythonBFS优化
有没有办法进一步优化我的代码? 我正在尝试解决 2020 CCC J5/Q2 问题,我已经通过了所有测试用例,除了少数超出了时间限制。
问题链接(这是最后一个问题) https://cemc.uwaterloo.ca/contests/computing/2020/ccc/juniorEF.pdf
#definitions
row = int(input())
column = int(input())
array = [list(map(int,input().split())) for x in range(row)]
area = row*column
#Setting the queue to only have -1
pathways = [-1]*(area+1)
emptyS = 0
currentPath = 0
inList = [False] * 1000001
#Setting the first number in the queue to equal the number at [0][0]
pathways[emptyS] = array[0][0]
emptyS += 1`enter code here`
#Checking if the number at [0][0] is the answer (the answer is the area of the array)
if pathways[currentPath] == area:
print('yes')
raise SystemExit(0)
#Using BFS to find the answer
#Looping until the queue hits -1
while pathways[currentPath] != -1:
for x in range(1,row+1):
if pathways[currentPath] % x == 0:
for y in range(1,column+1):
#I wasn't sure how to add 1 to every index of my 2d array,so I added 1 in the for loop,and arrayMN is the actual index in my loop.
arrayMN = array[x-1][y-1]
if pathways[currentPath] == x*y:
#Checking if the value is equal to the answer
if arrayMN == area:
print("yes")
raise SystemExit(0)
#If it isn't equal,either replace the -1 in pathways with the number (add it to the queue) or don't add it to prevent a loop)
if inList[arrayMN] == False:
pathways[emptyS] = arrayMN
emptyS += 1
inList[arrayMN] = True
currentPath += 1
#If none of the above works,it is not possible
print('no')
这是我第一次在论坛发帖,所以如果我可以做些什么来改进我的帖子,请告诉我。
解决方法
是的。以下是我对自己的代码所做的更改,这些更改最初遵循与您类似的算法,最终让所有测试在时限内通过。
内部 for y
循环不是必需的,因为一旦您知道 paths[currentPath] 可以被 x 整除,y 位置就已经知道了。您可以通过以下方式获取该值:y = pathways[currentPath] // x
并且需要在使用它计算 y <= column
之前检查它不超过您拥有的列数:arrayMN
。
通过将 array
转换为单元格值的字典,不需要内部 for x 循环:值出现对的行 *
列。当您第一次获得输入时,检查每个值是否在字典中。如果不是,则添加一个包含其行 *
列值的集合。如果是,只需将行 * 列值添加到现有集合中。现在您可以向后工作:从退出单元格值开始,将字典中的相应值添加到您的队列中,然后重复直到队列为空(无转义)或您在队列中找到 1(转义)。
此外,考虑使用集合库中的 deque
而不是 pathways
列表作为您的队列,并使用集合代替 inList
来跟踪单元格值。与您的代码不同,我最初用于队列的列表在长度上发生了变化,Python 文档清楚地表明 deque 会更快:
https://docs.python.org/3/library/collections.html#collections.deque
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。