forked from UNN/2026-rff_mp
- Реализовал bfs - Мелкие правки в dfs - Переместил command в command(хватит bububu) может потом допишу реализацию
436 lines
13 KiB
Plaintext
436 lines
13 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "4489fc7e",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"S # ###\n",
|
||
"## # # E\n",
|
||
"# # #\n",
|
||
"### ## #\n",
|
||
"# #\n",
|
||
"########\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"with open('test_lab.txt') as f:\n",
|
||
" data = f.readlines()\n",
|
||
" for el in data:\n",
|
||
" print(el.rstrip())"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"id": "fde1eddb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"S # ###\n",
|
||
"## # # E\n",
|
||
"# # #\n",
|
||
"### ## #\n",
|
||
"# #\n",
|
||
"########\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from source.builder.builder import TextFileMazeBuilder\n",
|
||
"\n",
|
||
"builder = TextFileMazeBuilder()\n",
|
||
"maze = builder.buildFromFile(filename='test_lab.txt')\n",
|
||
"\n",
|
||
"maze.printer()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "22325f68",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Загружен лабиринт:\n",
|
||
"S*P# ###\n",
|
||
"## # # E\n",
|
||
"# # #\n",
|
||
"### ## #\n",
|
||
"# #\n",
|
||
"########\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from source.observer.console_view import ConsoleView\n",
|
||
"from source.observer.observer import Event\n",
|
||
"\n",
|
||
"view = ConsoleView()\n",
|
||
"view.update(Event(\n",
|
||
" event=\"maze_loaded\",\n",
|
||
" maze=maze,\n",
|
||
" player_position=(2, 0),\n",
|
||
" path=[(0, 0), (1, 0)]\n",
|
||
"))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "19840429",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Старт: (0, 0)\n",
|
||
"Выход: (7, 1)\n",
|
||
"Соседи старта: [(1, 0)]\n",
|
||
"для клекти (0, 0) соседи: [(1, 0)]\n",
|
||
"для клекти (1, 0) соседи: [(0, 0), (2, 0)]\n",
|
||
"для клекти (2, 0) соседи: [(2, 1), (1, 0)]\n",
|
||
"для клекти (2, 1) соседи: [(2, 0), (2, 2)]\n",
|
||
"для клекти (2, 2) соседи: [(2, 1), (1, 2), (3, 2)]\n",
|
||
"для клекти (3, 2) соседи: [(3, 3), (2, 2), (4, 2)]\n",
|
||
"для клекти (4, 2) соседи: [(4, 1), (3, 2)]\n",
|
||
"для клекти (4, 1) соседи: [(4, 0), (4, 2)]\n",
|
||
"для клекти (4, 0) соседи: [(4, 1)]\n",
|
||
"для клекти (3, 3) соседи: [(3, 2), (3, 4)]\n",
|
||
"для клекти (3, 4) соседи: [(3, 3), (2, 4), (4, 4)]\n",
|
||
"для клекти (4, 4) соседи: [(3, 4), (5, 4)]\n",
|
||
"для клекти (5, 4) соседи: [(4, 4), (6, 4)]\n",
|
||
"для клекти (6, 4) соседи: [(6, 3), (5, 4)]\n",
|
||
"для клекти (6, 3) соседи: [(6, 2), (6, 4)]\n",
|
||
"для клекти (6, 2) соседи: [(6, 1), (6, 3)]\n",
|
||
"для клекти (6, 1) соседи: [(6, 2), (7, 1)]\n",
|
||
"Путь найден:\n",
|
||
"S**# ###\n",
|
||
"##*# #*E\n",
|
||
"# ** #*#\n",
|
||
"###*##*#\n",
|
||
"# ****#\n",
|
||
"########\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"([(2, 1), (1, 0)],\n",
|
||
" [(0, 0),\n",
|
||
" (1, 0),\n",
|
||
" (2, 0),\n",
|
||
" (2, 1),\n",
|
||
" (2, 2),\n",
|
||
" (3, 2),\n",
|
||
" (3, 3),\n",
|
||
" (3, 4),\n",
|
||
" (4, 4),\n",
|
||
" (5, 4),\n",
|
||
" (6, 4),\n",
|
||
" (6, 3),\n",
|
||
" (6, 2),\n",
|
||
" (6, 1),\n",
|
||
" (7, 1)])"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from source.strategy.DFS import DFS\n",
|
||
"from source.strategy.maze_solver import MazeSolver\n",
|
||
"from source.classes.cell import Cell\n",
|
||
"\n",
|
||
"\n",
|
||
"solver = MazeSolver(maze, DFS(), ConsoleView())\n",
|
||
"stats = solver.solve()\n",
|
||
"\n",
|
||
"[cord.getXY() for cord in maze.getNeighbors(cell=Cell(2, 0))], [cord.getXY() for cord in stats.path]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "73ba37a8",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Старт: (0, 0)\n",
|
||
"Выход: (7, 1)\n",
|
||
"Соседи старта: [(1, 0)]\n",
|
||
"для клекти (0, 0) соседи: [(1, 0)]\n",
|
||
"для клекти (1, 0) соседи: [(0, 0), (2, 0)]\n",
|
||
"для клекти (2, 0) соседи: [(2, 1), (1, 0)]\n",
|
||
"для клекти (2, 1) соседи: [(2, 0), (2, 2)]\n",
|
||
"для клекти (2, 2) соседи: [(2, 1), (1, 2), (3, 2)]\n",
|
||
"для клекти (3, 2) соседи: [(3, 3), (2, 2), (4, 2)]\n",
|
||
"для клекти (4, 2) соседи: [(4, 1), (3, 2)]\n",
|
||
"для клекти (4, 1) соседи: [(4, 0), (4, 2)]\n",
|
||
"для клекти (4, 0) соседи: [(4, 1)]\n",
|
||
"для клекти (3, 3) соседи: [(3, 2), (3, 4)]\n",
|
||
"для клекти (3, 4) соседи: [(3, 3), (2, 4), (4, 4)]\n",
|
||
"для клекти (4, 4) соседи: [(3, 4), (5, 4)]\n",
|
||
"для клекти (5, 4) соседи: [(4, 4), (6, 4)]\n",
|
||
"для клекти (6, 4) соседи: [(6, 3), (5, 4)]\n",
|
||
"для клекти (6, 3) соседи: [(6, 2), (6, 4)]\n",
|
||
"для клекти (6, 2) соседи: [(6, 1), (6, 3)]\n",
|
||
"для клекти (6, 1) соседи: [(6, 2), (7, 1)]\n",
|
||
"Путь найден:\n",
|
||
"S**# ###\n",
|
||
"##*# #*E\n",
|
||
"# ** #*#\n",
|
||
"###*##*#\n",
|
||
"# ****#\n",
|
||
"########\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"([(2, 1), (1, 0)],\n",
|
||
" [(0, 0),\n",
|
||
" (1, 0),\n",
|
||
" (2, 0),\n",
|
||
" (2, 1),\n",
|
||
" (2, 2),\n",
|
||
" (3, 2),\n",
|
||
" (3, 3),\n",
|
||
" (3, 4),\n",
|
||
" (4, 4),\n",
|
||
" (5, 4),\n",
|
||
" (6, 4),\n",
|
||
" (6, 3),\n",
|
||
" (6, 2),\n",
|
||
" (6, 1),\n",
|
||
" (7, 1)])"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from source.strategy.BFS import BFS\n",
|
||
"from source.strategy.maze_solver import MazeSolver\n",
|
||
"from source.classes.cell import Cell\n",
|
||
"\n",
|
||
"\n",
|
||
"solver = MazeSolver(maze, BFS(), ConsoleView())\n",
|
||
"stats = solver.solve()\n",
|
||
"\n",
|
||
"[cord.getXY() for cord in maze.getNeighbors(cell=Cell(2, 0))], [cord.getXY() for cord in stats.path]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"id": "857c5c04",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"0\n",
|
||
"2\n",
|
||
"1\n",
|
||
"4\n",
|
||
"3\n",
|
||
"3\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'0', '1', '2', '3', '4'}"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"def dfs(graph, start, visited=None):\n",
|
||
" if visited is None:\n",
|
||
" visited = set()\n",
|
||
" visited.add(start)\n",
|
||
"\n",
|
||
" print(start)\n",
|
||
"\n",
|
||
" for next in graph[start] - visited:\n",
|
||
" dfs(graph, next, visited)\n",
|
||
" return visited\n",
|
||
"\n",
|
||
"\n",
|
||
"graph = {'0': set(['1', '2']),\n",
|
||
" '1': set(['0', '3', '4']),\n",
|
||
" '2': set(['0']),\n",
|
||
" '3': set(['1']),\n",
|
||
" '4': set(['2', '3'])}\n",
|
||
"\n",
|
||
"dfs(graph, '0')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"id": "9a5ea5cb",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Размер: 8x6\n",
|
||
"(0,0): wall=False, start=True, exit=False\n",
|
||
"(1,0): wall=False, start=False, exit=False\n",
|
||
"(2,0): wall=False, start=False, exit=False\n",
|
||
"(3,0): wall=True, start=False, exit=False\n",
|
||
"(4,0): wall=False, start=False, exit=False\n",
|
||
"(5,0): wall=True, start=False, exit=False\n",
|
||
"(6,0): wall=True, start=False, exit=False\n",
|
||
"(7,0): wall=True, start=False, exit=False\n",
|
||
"(0,1): wall=True, start=False, exit=False\n",
|
||
"(1,1): wall=True, start=False, exit=False\n",
|
||
"(2,1): wall=False, start=False, exit=False\n",
|
||
"(3,1): wall=True, start=False, exit=False\n",
|
||
"(4,1): wall=False, start=False, exit=False\n",
|
||
"(5,1): wall=True, start=False, exit=False\n",
|
||
"(6,1): wall=False, start=False, exit=False\n",
|
||
"(7,1): wall=False, start=False, exit=True\n",
|
||
"(0,2): wall=True, start=False, exit=False\n",
|
||
"(1,2): wall=False, start=False, exit=False\n",
|
||
"(2,2): wall=False, start=False, exit=False\n",
|
||
"(3,2): wall=False, start=False, exit=False\n",
|
||
"(4,2): wall=False, start=False, exit=False\n",
|
||
"(5,2): wall=True, start=False, exit=False\n",
|
||
"(6,2): wall=False, start=False, exit=False\n",
|
||
"(7,2): wall=True, start=False, exit=False\n",
|
||
"(0,3): wall=True, start=False, exit=False\n",
|
||
"(1,3): wall=True, start=False, exit=False\n",
|
||
"(2,3): wall=True, start=False, exit=False\n",
|
||
"(3,3): wall=False, start=False, exit=False\n",
|
||
"(4,3): wall=True, start=False, exit=False\n",
|
||
"(5,3): wall=True, start=False, exit=False\n",
|
||
"(6,3): wall=False, start=False, exit=False\n",
|
||
"(7,3): wall=True, start=False, exit=False\n",
|
||
"(0,4): wall=True, start=False, exit=False\n",
|
||
"(1,4): wall=False, start=False, exit=False\n",
|
||
"(2,4): wall=False, start=False, exit=False\n",
|
||
"(3,4): wall=False, start=False, exit=False\n",
|
||
"(4,4): wall=False, start=False, exit=False\n",
|
||
"(5,4): wall=False, start=False, exit=False\n",
|
||
"(6,4): wall=False, start=False, exit=False\n",
|
||
"(7,4): wall=True, start=False, exit=False\n",
|
||
"(0,5): wall=True, start=False, exit=False\n",
|
||
"(1,5): wall=True, start=False, exit=False\n",
|
||
"(2,5): wall=True, start=False, exit=False\n",
|
||
"(3,5): wall=True, start=False, exit=False\n",
|
||
"(4,5): wall=True, start=False, exit=False\n",
|
||
"(5,5): wall=True, start=False, exit=False\n",
|
||
"(6,5): wall=True, start=False, exit=False\n",
|
||
"(7,5): wall=True, start=False, exit=False\n",
|
||
"\n",
|
||
"Клетка (2,0) из лабиринта: wall=True\n",
|
||
"Соседи (2,0): [(1, 2)]\n",
|
||
"Соседи (1,0): [(0, 0)]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"# Проверьте структуру лабиринта\n",
|
||
"print(f\"Размер: {maze.width}x{maze.height}\")\n",
|
||
"\n",
|
||
"# Проверьте конкретные клетки\n",
|
||
"for y in range(maze.height):\n",
|
||
" for x in range(maze.width):\n",
|
||
" cell = maze.cells[y][x]\n",
|
||
" print(f\"({x},{y}): wall={cell.isWall}, start={cell.isStart}, exit={cell.isExit}\")\n",
|
||
"\n",
|
||
"# Проверьте соседей конкретной клетки из лабиринта\n",
|
||
"cell_from_maze = maze.cells[2][0] # Берём реальную клетку из лабиринта\n",
|
||
"print(f\"\\nКлетка (2,0) из лабиринта: wall={cell_from_maze.isWall}\")\n",
|
||
"print(f\"Соседи (2,0): {[n.getXY() for n in maze.getNeighbors(cell_from_maze)]}\")\n",
|
||
"\n",
|
||
"# Проверьте соседей (1,0)\n",
|
||
"cell_1_0 = maze.cells[1][0]\n",
|
||
"print(f\"Соседи (1,0): {[n.getXY() for n in maze.getNeighbors(cell_1_0)]}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "32edf4d1",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"['S # ###', '## # # E', '# # #', '### ## #', '# #', '########']\n",
|
||
"8 6\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"with open('test_lab.txt') as f:\n",
|
||
" data = f.read().splitlines()\n",
|
||
" x, y = 0, 0\n",
|
||
" width = len(data[0])\n",
|
||
" height = len(data)\n",
|
||
" print(data)\n",
|
||
" print(width, height)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"id": "48d20564",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.10.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|