叙述
2025.3.29目前第一个python版,没过TLE
第一次用字典,第二次用数组,多过了一个测试点
错误记录
样例总是27——>坐标索引不一致,直接读入的坐标却以为0开始计算的
感想
确实不如C++简洁优雅(可能我不熟练)
期待python的AC版
Python3 代码【过7个版】
#多源bfs
from collections import deque
dx=[0,0,1,-1]
dy=[1,-1,0,0]
def check(x,y):
if x<1 or x>n or y<1 or y>n or st[x][y]==True:
return False
return True
def bfs():
res=0
while len(q):
t=q.popleft()
for i in range(4):
nx=t[0]+dx[i]
ny=t[1]+dy[i]
if check(nx,ny):
ans[(nx,ny)]=ans[t]+1
st[nx][ny]=True
q.append((nx,ny))
if (nx,ny) in guest:
res+=ans[(nx,ny)]*guest[(nx,ny)]
#print(f'距离:{ans[(nx,ny)]} 坐标是{nx},{ny}的点有{guest[(nx,ny)]}份餐')
return res
n,m,k,d=map(int,input().split())
q=deque() #队列存点
st=[[False for _ in range(n+1)] for _ in range(n+1)] #走过状态
ans={} #dis距离,用数组也可
guest={} #终点(顾客位置)
for i in range(m):
x,y=map(int,input().split())
q.append((x,y))
ans[(x,y)]=0
st[x][y]=True
for i in range(k):
x,y,c=map(int,input().split())
if (x,y) in guest:
guest[(x,y)]+=c
else:
guest[(x,y)]=c
for i in range(d):
x,y=map(int,input().split())
st[x][y]=True
print(bfs())
Python3代码【过8个版】
#多源bfs
from collections import deque
dx=[0,0,1,-1]
dy=[1,-1,0,0]
def check(x,y):
if x<1 or x>n or y<1 or y>n or st[x][y]==True:
return False
return True
def bfs():
res=0
while len(q):
t=q.popleft()
for i in range(4):
nx=t[0]+dx[i]
ny=t[1]+dy[i]
if check(nx,ny):
dis[nx][ny]=dis[t[0]][t[1]]+1
st[nx][ny]=True
q.append((nx,ny))
res+=dis[nx][ny]*guest[nx][ny]
return res
n,m,k,d=map(int,input().split())
q=deque() #队列存点
st=[[False for _ in range(n+1)] for _ in range(n+1)] #走过状态
dis=[[False for _ in range(n+1)] for _ in range(n+1)] #dis距离,用数组也可
guest=[[False for _ in range(n+1)] for _ in range(n+1)] #终点(顾客位置)
for i in range(m):
x,y=map(int,input().split())
q.append((x,y))
st[x][y]=True
for i in range(k):
x,y,c=map(int,input().split())
guest[x][y]+=c
for i in range(d):
x,y=map(int,input().split())
st[x][y]=True
print(bfs())