Python3为什么wa了一半啊啊啊啊
查看原帖
Python3为什么wa了一半啊啊啊啊
1202745
jinbaobei1212楼主2025/6/24 17:33
# check函数的作用:用bfs搜索思想,检验mid答案合法性
def check(mid):
    global flag_cnt,queue,visit
    queue=[[x0,y0]]
    dir=[[0,1],[0,-1],[-1,0],[1,0]]
    visit[x0][y0]=1
    while (len(queue)!=0):
        # 暂存出队元素下标
        a,b=queue.pop(0)
        for i in range(4):
            x,y=a+dir[i][0],b+dir[i][1]
            if (0<=x<m and 0<=y<n):
                if (visit[x][y]==1):
                    continue                
                if (abs(high[a][b]-high[x][y])>mid):
                    continue
                visit[x][y]=1    
                # 到出口了    
                if (flag[x][y]==1):
                    flag_cnt+=1
                    if (flag_cnt==flag_num):
                        return True
                queue.append((x,y))
    return False        
                
            
                    
m,n=map(int,input().split())
# 高度
high=[list(map(int,input().split())) for i in range(m)]
# 路标
flag=[list(map(int,input().split())) for i in range(m)]
visit=[[0]*n for i in range(m)]
flag_cnt=1
queue=[]
# flag总数
flag_num=sum(element for row in flag for element in row)
# 先找到起点,再bfs
x0, y0 = next((i, j) for i in range(m) for j in range(n) if flag[i][j] == 1)               
ans=1e9+1

# 二分模板
l,r=-1,1e9+1
while (l+1<r):
    mid=(l+r)//2
    if (check(mid)):
        r=mid
        ans=min(ans,r)
    else:
        l=mid
    queue=[]
    visit=[[0]*n for i in range(m)]
    flag_cnt=1
print(int(ans))        
2025/6/24 17:33
加载中...