蓝桥杯Python组中,如何编写迷宫求解算法?

2026-05-26 18:361阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计517个文字,预计阅读时间需要3分钟。

蓝桥杯Python组中,如何编写迷宫求解算法?

蓝桥杯Python组——迷宫

python迷宫问题代码示例def find_path(maze, start, end): x, y=start if maze[x][y]==end: return [start] for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: nx, ny=x + dx, y + dy if 0 <=nx

maze=[ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 0]]start=(0, 0)end=(4, 4)

path=find_path(maze, start, end)if path: print(找到路径:, path)else: print(没有找到路径)


蓝桥杯python组——迷宫

01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000import os

from collections import *
mp = []
for i in range(30):
mp.append(list(map(int,input())))
k = ('D','L','R','U')
dir = [(1,0),(0,-1),(0,1),(-1,0)] # 标记方向
vis = [[0]*50 for i in range(30)] # 标记走没走过
pre = [['']*50 for i in range(30)] # 记录怎么来到这个点的

def print_pass(x,y):
if x == 0 and y == 0:
return
if pre[x][y] == 'D': print_pass(x-1, y)
if pre[x][y] == 'L': print_pass(x, y+1)
if pre[x][y] == 'R': print_pass(x, y-1)
if pre[x][y] == 'U': print_pass(x+1, y)
print(pre[x][y],end="")

def bfs():
global pre
global vis
q=deque()
q.append((0,0))
vis[0][0]=1
while q:
now = q.popleft()#删除q最左边的元素
if now[0]==29 and now[1]==49:
print_pass(29,49)
return
for i in range(4):
next=[0,0]
next[0]=now[0]+dir[i][0]
next[1]=now[1]+dir[i][1]
if next[0]<0 or next[0]>=30 or next[1]<0 or next[1]>=50:
continue
if vis[next[0]][next[1]]==1 or mp[next[0]][next[1]]==1:
continue
vis[next[0]][next[1]]=1
q.append((next[0],next[1]))
pre[next[0]][next[1]]=k[i]
bfs()

最终答案为DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR

谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!



蓝桥杯Python组中,如何编写迷宫求解算法?

本文共计517个文字,预计阅读时间需要3分钟。

蓝桥杯Python组中,如何编写迷宫求解算法?

蓝桥杯Python组——迷宫

python迷宫问题代码示例def find_path(maze, start, end): x, y=start if maze[x][y]==end: return [start] for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: nx, ny=x + dx, y + dy if 0 <=nx

maze=[ [0, 1, 0, 0, 0], [0, 1, 0, 1, 0], [0, 0, 0, 1, 0], [1, 1, 1, 1, 0], [0, 0, 0, 0, 0]]start=(0, 0)end=(4, 4)

path=find_path(maze, start, end)if path: print(找到路径:, path)else: print(没有找到路径)


蓝桥杯python组——迷宫

01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000import os

from collections import *
mp = []
for i in range(30):
mp.append(list(map(int,input())))
k = ('D','L','R','U')
dir = [(1,0),(0,-1),(0,1),(-1,0)] # 标记方向
vis = [[0]*50 for i in range(30)] # 标记走没走过
pre = [['']*50 for i in range(30)] # 记录怎么来到这个点的

def print_pass(x,y):
if x == 0 and y == 0:
return
if pre[x][y] == 'D': print_pass(x-1, y)
if pre[x][y] == 'L': print_pass(x, y+1)
if pre[x][y] == 'R': print_pass(x, y-1)
if pre[x][y] == 'U': print_pass(x+1, y)
print(pre[x][y],end="")

def bfs():
global pre
global vis
q=deque()
q.append((0,0))
vis[0][0]=1
while q:
now = q.popleft()#删除q最左边的元素
if now[0]==29 and now[1]==49:
print_pass(29,49)
return
for i in range(4):
next=[0,0]
next[0]=now[0]+dir[i][0]
next[1]=now[1]+dir[i][1]
if next[0]<0 or next[0]>=30 or next[1]<0 or next[1]>=50:
continue
if vis[next[0]][next[1]]==1 or mp[next[0]][next[1]]==1:
continue
vis[next[0]][next[1]]=1
q.append((next[0],next[1]))
pre[next[0]][next[1]]=k[i]
bfs()

最终答案为DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR

谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!



蓝桥杯Python组中,如何编写迷宫求解算法?