赞
踩
给出四个点求经过2020分钟后扩散成几个点了,以点为中心向四周扩散的话容易想到是要使用BFS实现。=》多源点BFS
通过比较我们发现,不同的数据类型它的处理速度是不一样的。
在队列模型中,最快的是deque双向队列,其次是列表,最后是queue单向队列,没想到列表不是最慢的。如果要进行数据存储的话集合是最快的,其次是字典,最后时列表,所以进行数据存储的话不要再使用列表啦!(更正:涉及数据查找时不要在列表里面查找)
根据以上结论,以后的BFS要使用deque+集合(判断是否访问过)(如果需要记录路径就用字典)的形式进行计算。
import collections d=[(1,0),(-1,0),(0,1),(0,-1)] pre={(0,0):(0,0),(2020, 11):(2020,11),(11, 14):(11, 14),(2000, 2000):(2000, 2000)}#初始状态,自己是自己的前节点,本题不用保存路径,完全可以用set ans=4#已经有4个为黑色 queue=collections.deque() queue.append((0,0,0))#为入队列的坐标新增一个属性,记录当前是第几分钟被染色的!!!! queue.append((2020, 11, 0)) queue.append((11, 14, 0)) queue.append((2000, 2000, 0)) while queue: t=queue.popleft() if t[2]>=2020: print(ans) break else: for i in d: nx,ny=t[0]+i[0],t[1]+i[1] if (nx,ny) not in pre.keys() :#题目说画布是无限大的,没有边界问题 queue.append((nx,ny,t[2]+1)) pre[(nx,ny)]=(t[0],t[1]) ans+=1#记录被染色的个数 #扩散 20312088
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。