n, m = map(int,input().split())
data = []
d = [[1,0],[-1,0],[0,1],[0,-1]]
for i in range(n):
l = list(map(int,input().split()))
data.append(l)
x1, y1, x2, y2 = map(int,input().split())
def bfs(x1,y1,step):
queue=[(x1-1,y1-1,step)]
while queue:
x,y,step=queue.pop(0)
if x==x2-1 and y==y2-1:
return step
for xx,yy in d:
dx = x+xx
dy = y+yy
if 0<= dx <n and 0<= dy <m and data[dx][dy] :
data[dx][dy]=0
queue.append((dx,dy,step+1))
return -1
print(bfs(x1,y1,0))
2.2.P1443 马的遍历
做好久了但是还是没有完全通过,怎么办可以帮忙看看嘛
python复制代码
n, m, x, y= map(int,input().split())
d = [[-1,2],[-2,1],[-2,-1],[-1,-2],[1,2],[2,1],[2,-1],[1,-2]]
data = []
result = [[0 for _ in range(m)]for _ in range(n)]
for i in range(1,n+1):
for j in range(1,m+1):
data.append([i,j])
from collections import deque
def bfs(x,y,a,b,step,visit):
queue = deque([(x,y,step)])
while len(queue) != 0:
x1, y1, step = queue.popleft()
if x1 == a and y1 == b:
return step
for xx,yy in d:
dx = x1+xx
dy = y1+yy
if dx < 1 or dx > n or dy < 1 or dy > m:
continue
if visit[dx][dy] == 0:
visit[dx][dy] = 1
queue.append((dx, dy, step + 1))
return -1
for i,j in data:
visit = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
visit[x][y] = 1
ans = bfs(x,y,i,j,0,visit)
result[i-1][j-1] = ans
for i in result:
for j in i:
print(j,end='\t')
print('\n',end='')
start = input()
end = input()
map1 = [[0 for _ in range(3)] for _ in range(3)]
map2 = [[0 for _ in range(3)] for _ in range(3)]
k1, k2 = 0, 0
for i in range(3):
for j in range(3):
map1[i][j] = start[k1]
if start[k1] == '.':
a, b = i, j
k1 += 1
for i in range(3):
for j in range(3):
map2[i][j] = end[k2]
k2 += 1
d = [[1,0],[-1,0],[0,1],[0,-1]]
def bfs(a,b,step):
global map1
visit = [[0 for _ in range(3)] for _ in range(3)]
queue = [(a,b,step)]
visit[a][b] = 1
while queue:
x, y, step = queue.pop(0)
if map1 == map2:
return step
for xx,yy in d:
dx = x+xx
dy = y+yy
if dx<0 or dx>2 or dy<0 or dy>2:
continue
if visit[dx][dy] == 0:
visit[dx][dy] = 1
map1[x][y],map1[dx][dy] = map1[dx][dy],map1[x][y]
queue.append((dx,dy,step+1))
return -1
print(bfs(a,b,0))
n, m = map(int,input().split())
maps = []
for i in range(n):
l = list(input())
maps.append(l)
k = int(input())
from collections import deque
queue = deque()
for i in range(n):
for j in range(m):
if maps[i][j] == 'g':
queue.append((i,j))
d = [[1,0],[-1,0],[0,1],[0,-1]]
def bfs():
ans = len(queue)
while ans:
x1, y1 = queue.popleft()
for xx,yy in d:
dx = x1+xx
dy = y1+yy
# if dx<0 or dx>=n or dy<0 or dy>=m:
# continu
if 0<=dx<n and 0<=dy<m and maps[dx][dy] == '.':
maps[dx][dy] = 'g'
queue.append((dx,dy))
ans -= 1
for i in range(k):
bfs()
for i in maps:
print(''.join(i))