from collections import deque
dr=[-1,1,0,0]
dc=[0,0,-1,1]
def draw(graph,c1,r1,c2,r2):
for r in range(r1, r2+1):
for c in range(c1,c2+1):
if (r1==r or r==r2 or c1==c or c==c2) and graph[r][c]!=0:
graph[r][c]=1
else:
graph[r][c]=0
return graph
def bfs(start, end,board):
n = len(board)
que = deque()
que.append(start)
while que:
r,c = que.popleft()
if [r,c]==end:
print([r,c],end,board[r][c]//2)
return board[r][c]//2
for idx in range(4):
nr, nc = r+dr[idx],c+dc[idx]
if 0<=nr<n and 0<=nc<n and board[nr][nc]==1:
que.append([nr, nc])
board[nr][nc]=board[r][c]+1
def solution(rectangle, characterX, characterY, itemX, itemY):
n = 51 * 2
board = [[-1 for _ in range(n)] for _ in range(n)]
for c1,r1,c2,r2 in rectangle:
board = draw(board, 2*c1,2*r1,2*c2,2*r2)
print(board[2*characterX][2*characterY])
answer = bfs([2*characterY,2*characterX],[2*itemY,2*itemX], board)
return answer