1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| import math from collections import deque
# ---------- 判断质数 ---------- def is_prime(n: int) -> bool: if n < 2: return False if n == 2: return True for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True
# ---------- 判断是否为两个质数的乘积 ---------- def defactor_prime(n: int) -> bool: if n < 4: return False for p in range(2, int(math.sqrt(n)) + 1): if n % p == 0: q = n // p if is_prime(p) and is_prime(q): return True return False
# ---------- 数据 ---------- maze_data = [ 0x2C0E, 0x1312, 0x7F44, 0x4C2B, 0x966, 0x1E12, 0x1263, 0x1828, 0x31A1, 0x52AE, 0x1DC6, 0x4019, 0x3D89, 0x614D, 0x1A4A, 0x3A24, 0x5406, 0xE61, 0x658, 0xD4C, 0x5423, 0x4860, 0x7988, 0x1FA3, 0x705B, 0x4464, 0x63EF, 0x403E, 0x50CB, 0x1676, 0x5132, 0x68B5, 0x4A38, 0x6FF5, 0x189B, 0x170B, 0x2704, 0x20ED, 0x4938, 0x47F6, 0x7512, 0x5196, 0x2B7C, 0x4A50, 0x2E54, 0x6FBE, 0x3532, 0x7B54, 0xABD, 0x2889, 0x56C0, 0x323B, 0x3698, 0x31CF, 0x435A, 0x75FA, 0xA2B, 0x200B, 0x45ED, 0x163F, 0x2554, 0x62BB, 0x3393, 0x2A31, 0x2956, 0x3004, 0x3684, 0x3DEE, 0x47AC, 0x2267, 0x629E, 0x1E93, 0x7943, 0x661B, 0x7FB4, 0x255A, 0x3D37, 0x1804, 0x69E1, 0x312C, 0x3999, 0x293F, 0x2F0E, 0x743A, 0x117, 0x64CD, 0x7C76, 0x5CBF, 0x6AB0, 0x585, 0x6CFC, 0x3CE6, 0x6FAB, 0xF81, 0x511C, 0x24E4, 0x785, 0x5AEB, 0x2977, 0xBFB, 0x55F8, 0x39, 0x29DD, 0x4987, 0x133B, 0x5E2F, 0x7F4D, 0x6497, 0x62C2, 0x3774, 0x1826, 0x78C, 0x20BB, 0x5473, 0x68B6, 0x27FB, 0x7321, 0x1B0E, 0x6280, 0x54E2, 0x5133, 0x61E7, 0x2F6B, 0x5AE2, 0x1B09, 0x64BB, 0x71B, 0x6272, 0x453F, 0x22BD, 0xD68, 0x52A9, 0x3116, 0x19AD, 0x28F6, 0x141E, 0x6B10, 0x32AC, 0x2394, 0x353D, 0x6A40, 0x697, 0x80E, 0x6883, 0x4297, 0x175D, 0xB3A, 0x4584, 0x4FB8, 0x55D2, 0x2592, 0x5F99, 0x5986, 0x5A84, 0x71A3, 0x3975, 0x525, 0x3E15, 0x823, 0x12D7, 0x78EF, 0x636B, 0x471A, 0x531C, 0x23F8, 0x38D7, 0x7E64, 0x18DB, 0x344E, 0x5655, 0x1C69, 0xEE8, 0x23C, 0x25C8, 0x684, 0x776D, 0xB65, 0x7855, 0x602D, 0x277E, 0x60AC, 0x1885, 0x6E40, 0x3EEC, 0x175C, 0xD2B, 0x4F2E, 0x645, 0x6C70, 0x457D, 0x5CD8, 0x2B12, 0x11C, 0x7AAD, 0x2E5E, 0x37CB, 0x5CF8, 0x5C48, 0x648F, 0x3841, 0x6344, 0x7F63, 0x5C2, 0xBE2, 0x717A, 0x7317, 0x711A, 0x4344, 0x319, 0x756E, 0x2F5E, 0x6EF2, 0x23B0, 0x1ED5, 0x5A1B, 0x5FFF, 0x7494, 0x5C4C, 0x7D2C, 0x2C51, 0x4BE4, 0x5197, 0x2384, 0x64DD, 0x62E9, 0x5019, 0x447E, 0x1DA1, 0x70B3, 0x5B03, 0x17BC, 0x4ED4, 0x3E1F, 0x26F8, 0x2AF2, 0x7B64, 0x4634, 0x69D9, 0x75A, 0x344B, 0x27D0, 0xC9C, 0x385E, 0x2496, 0x5635, 0x57AA, 0x44A8, 0x62AF, 0x65E7, 0x3284, 0x7A73, 0x1CCF, 0x25F4, 0x5DCD, 0x5CDE, 0x109B, 0x7890, 0x45CF, 0x5FEF, 0x4ABB, 0x26, 0x47D, 0x6121, 0x3A42, 0x5519, 0x32AF, 0x2096, 0x18E7, 0x4181, 0x1FB2 ]
# ---------- 构建地图 ---------- layers, rows, cols = 3, 9, 10 maze = [[[ '#' for _ in range(cols)] for _ in range(rows)] for _ in range(layers)]
for layer in range(layers): for i in range(rows): for j in range(cols): idx = layer * 90 + i * 10 + j if defactor_prime(maze_data[idx]): maze[layer][i][j] = '.'
# 起点终点 start = (0, 0, 0) end = (2, 8, 9) maze[start[0]][start[1]][start[2]] = 'E' maze[end[0]][end[1]][end[2]] = 'S'
# ---------- BFS 搜索路径 ---------- dirs = [ (-1, 0, 0, 'u'), (1, 0, 0, 'n'), (0, -1, 0, 'w'), (0, 1, 0, 's'), (0, 0, -1, 'a'), (0, 0, 1, 'd'), ]
def bfs(): q = deque([(start, '')]) visited = set([start]) while q: (z, y, x), path = q.popleft() if (z, y, x) == end: return path for dz, dy, dx, move in dirs: nz, ny, nx = z + dz, y + dy, x + dx if 0 <= nz < layers and 0 <= ny < rows and 0 <= nx < cols: if maze[nz][ny][nx] in ('.', 'S') and (nz, ny, nx) not in visited: visited.add((nz, ny, nx)) q.append(((nz, ny, nx), path + move)) return None
path = bfs()
# ---------- 打印迷宫 ---------- for l in range(layers): print(f"\nLayer {l}:") for row in maze[l]: print(''.join(row))
# ---------- 输出路径 ---------- if path: print("\n找到路径!") print("wasdun 路径指令:") print(path) print(f"\n路径长度: {len(path)}") else: print("\n没有找到通路。")
|