Найти Π² Π”Π·Π΅Π½Π΅

🧩 Как Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python

🧩 Как Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python? ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒ сСбС Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ S (Start) Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ E (End), обходя стСны #. Π—Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π°, Π½ΠΎ Π½Π° Π΄Π΅Π»Π΅ β€” это Π·Π°Π΄Π°Ρ‡Π° поиска ΠΏΡƒΡ‚ΠΈ Π² Π³Ρ€Π°Ρ„Π΅. Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚: S..#... ##.#... ....... .#..... ..#.... ..#.... ..#.... E##.... πŸ“Œ РСшаСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (BFS). Он ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ самый ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ. Код ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ, Π½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ: ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡ‚ΡŒ шаг Π·Π° шагом, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ посСщённыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚. πŸ” Π“Π»Π°Π²Π½ΠΎΠ΅: 1. Π‘Ρ‚Π°Ρ€Ρ‚ ΠΈ Ρ„ΠΈΠ½ΠΈΡˆ находятся автоматичСски 2. ΠŸΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΡ (#) ΠΎΠ±ΠΎΠΉΡ‚ΠΈ нСльзя 3. Если ΠΏΡƒΡ‚ΡŒ Π΅ΡΡ‚ΡŒ β€” ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ πŸ’» ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: MAZE = [ list("S..#..."), list("##.#..."), list("......."), list(".#....."), list("..#...."), list("..#...."), list("..#...."), list("E##...."), ] ROWS = len(MAZE) COLS = len(MAZE[0]) DELAY = 0.1 def find_start_and_end(maze): start = end = None for i in range(ROWS): for j in range(COLS): if maze[i][j] == 'S': start = (i, j) elif maze[i][j] =

🧩 Как Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python?

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒ сСбС Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ S (Start) Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ E (End), обходя стСны #. Π—Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π°, Π½ΠΎ Π½Π° Π΄Π΅Π»Π΅ β€” это Π·Π°Π΄Π°Ρ‡Π° поиска ΠΏΡƒΡ‚ΠΈ Π² Π³Ρ€Π°Ρ„Π΅.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π»Π°Π±ΠΈΡ€ΠΈΠ½Ρ‚:

S..#...

##.#...

.......

.#.....

..#....

..#....

..#....

E##....

πŸ“Œ РСшаСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (BFS). Он ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ самый ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ.

Код ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ, Π½ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ: ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡ‚ΡŒ шаг Π·Π° шагом, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ посСщённыС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚.

πŸ” Π“Π»Π°Π²Π½ΠΎΠ΅:

1. Π‘Ρ‚Π°Ρ€Ρ‚ ΠΈ Ρ„ΠΈΠ½ΠΈΡˆ находятся автоматичСски

2. ΠŸΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΈΡ (#) ΠΎΠ±ΠΎΠΉΡ‚ΠΈ нСльзя

3. Если ΠΏΡƒΡ‚ΡŒ Π΅ΡΡ‚ΡŒ β€” ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½

πŸ’» ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

MAZE = [

list("S..#..."),

list("##.#..."),

list("......."),

list(".#....."),

list("..#...."),

list("..#...."),

list("..#...."),

list("E##...."),

]

ROWS = len(MAZE)

COLS = len(MAZE[0])

DELAY = 0.1

def find_start_and_end(maze):

start = end = None

for i in range(ROWS):

for j in range(COLS):

if maze[i][j] == 'S':

start = (i, j)

elif maze[i][j] == 'E':

end = (i, j)

return start, end

def draw_maze(stdscr, maze, path=None):

stdscr.clear()

for i, row in enumerate(maze):

for j, ch in enumerate(row):

color = curses.color_pair(0)

if ch == '#':

color = curses.color_pair(1)

elif ch == '.':

color = curses.color_pair(2)

elif ch == '*':

color = curses.color_pair(3)

elif ch == 'S':

color = curses.color_pair(4)

elif ch == 'E':

color = curses.color_pair(5)

elif ch == 'o':

color = curses.color_pair(6)

stdscr.addstr(i, j * 2, ch + ' ', color)

stdscr.refresh()

time.sleep(DELAY)

def bfs_visual(stdscr, maze):

start, end = find_start_and_end(maze)

visited = set()

queue = deque()

queue.append((start, [start]))

visited.add(start)

while queue:

(x, y), path = queue.popleft()

if maze[x][y] not in ('S', 'E'):

maze[x][y] = '*'

draw_maze(stdscr, maze)

if (x, y) == end:

return path

for dx, dy in [(-1,0), (1,0), (0,-1), (0,1)]:

nx, ny = x + dx, y + dy

if 0 <= nx < ROWS and 0 <= ny < COLS:

if maze[nx][ny] in ('.', 'E') and (nx, ny) not in visited:

visited.add((nx, ny))

queue.append(((nx, ny), path + [(nx, ny)]))

return None

def mark_final_path(stdscr, maze, path):

for (x, y) in path:

if maze[x][y] not in ('S', 'E'):

maze[x][y] = 'o'

draw_maze(stdscr, maze)

def main(stdscr):

curses.curs_set(0)

curses.start_color()

curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) # стСна

curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK) # пусто

curses.init_pair(3, curses.COLOR_RED, curses.COLOR_BLACK) # тСкущая ячСйка

curses.init_pair(4, curses.COLOR_CYAN, curses.COLOR_BLACK) # старт

curses.init_pair(5, curses.COLOR_GREEN, curses.COLOR_BLACK) # Ρ„ΠΈΠ½ΠΈΡˆ

curses.init_pair(6, curses.COLOR_YELLOW, curses.COLOR_BLACK) # Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ

final_path = bfs_visual(stdscr, MAZE)

time.sleep(0.5)

if final_path:

mark_final_path(stdscr, MAZE, final_path)

stdscr.addstr(ROWS + 1, 0, "ΠŸΡƒΡ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½!", curses.color_pair(5))

else:

stdscr.addstr(ROWS + 1, 0, "ΠŸΡƒΡ‚ΡŒ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!", curses.color_pair(3))

stdscr.refresh()

stdscr.getch()

if __name__ == "__main__":

curses.wrapper(main)

✨ Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π»Π΅ΠΆΠΈΡ‚ Π² основС Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Π² ΠΈΠ³Ρ€Π°Ρ…, Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ ΠΈ Π΄Π°ΠΆΠ΅ GPS-систСмах!