洛谷:血色先锋队-->python解法

 

这道题跟病毒传染问题是差不多的,区别就在于这道题我们是不知道要多少次才能够把所有的领主全部感染。

如上图所示,我们的思路是先确认感染源的位置,然后模拟传染过程,用时间去标记每个感染的位置。

代码如下:

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])

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值