欢乐的周末-笔试题解析

import sys

while 1:
    try:
        import copy
        m, n = input().split(" ")
 
        m = int(m)
        n = int(n)
 
        l = []
        for _ in range(m):
            s = list(map(int, input().split()))
            l.append(s)
 
 
        #深度赋值l,因为dfs函数会改变传入参数ll的值,所以用一个复制一个
        l1= copy.deepcopy(l)   
        l2 =copy.deepcopy(l)
 
        tmp=[]
        for i in range(m):
            for j in range(n):
                if l[i][j]==2:
                    tmp.append([i,j])
 
 
        res1 = [[0] * m for _ in range(n)]
        res2 = [[0] * m for _ in range(n)]
 
        px=[-1,0,1,0]
        py=[0,-1,0,1]
 
 
        def dfs(ll,res,i,j,flag):
 
            for index in range(0,len(px)):
                new_x=i+px[index]
                new_y = j + py[index]
 
                if new_x<m and new_x>=0 and new_y<n and new_y>=0 and ll[new_x][new_y]!=1 and not flag:
                    ll[new_x][new_y]=1
                    res[new_x][new_y]=1
 
                    dfs(ll,res,new_x,new_y,flag)
 
                    ll[new_x][new_y]=0
 
 
        flag = False
        dfs(l1,res1,tmp[0][0],tmp[0][1],flag)
 
 
        flag = False
        dfs(l2, res2, tmp[1][0], tmp[1][1], flag)

 
 
        result=0
        for i in range(m):
            for j in range(n):
                if l[i][j] == 3 and res1[i][j]==1 and res2[i][j]==1:
                    result+=1
 
        print(result)

 
    except:
        break

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值