这道题跟病毒传染问题是差不多的,区别就在于这道题我们是不知道要多少次才能够把所有的领主全部感染。
如上图所示,我们的思路是先确认感染源的位置,然后模拟传染过程,用时间去标记每个感染的位置。
代码如下:
n,m,a,b= map(int,input(":").split(" "))
list_Total = []
list1 = []
list2 = []
time = 0 #时间
x = 0
for i in range(a):
list1.append(list(map(int, input(":").split())))
for i in range(b):
list2.append(list(map(int, input(":").split())))
arr=[]
for i in range(n):
for j in range(m):
arr.append("@")
list_Total.append(arr)
arr=[]
for i in range(a):
list_Total[list1[i][0]-1][list1[i][1]-1] = 0
while x < b:
time+=1
for i in range(n):
for j in range(m):
if list_Total[i][j] !="@" and list_Total[i][j] !="p":
#感染方向
if i+1>=0 and i+1<n and list_Total[i+1][j] == "@" :
list_Total[i+1][j] = "p"
if i-1>=0 and i-1<n and list_Total[i-1][j] == "@":
list_Total[i-1][j] = "p"
if j+1>=0 and j+1<m and list_Total[i][j+1] == "@":
list_Total[i][j+1] = "p"
if j-1>=0 and j-1<m and list_Total[i][j-1] == "@":
list_Total[i][j-1] = "p"
for i in range(n):
for j in range(m):
if list_Total[i][j] == "p":
list_Total[i][j] = time
x = 0 #被感染人数
for i in range(b):
if list_Total[list2[i][0]-1][list2[i][1]-1] !="@" and list_Total[list2[i][0]-1][list2[i][1]-1] !="p":
x+=1
for i in range(b):
print(list_Total[list2[i][0]-1][list2[i][1]-1])