Merge pull request '[2] 2-st-exercise' (#356) from volkovva/2026-rff_mp:2-st-exercise into develop

Reviewed-on: UNN/2026-rff_mp#356
This commit is contained in:
IvanBoy 2026-05-30 12:03:13 +00:00
commit 8deead6d69
17 changed files with 630 additions and 0 deletions

253
VolkovVA/cod.py Normal file
View File

@ -0,0 +1,253 @@
import time, os
from collections import deque
from abc import ABC, abstractmethod
import heapq # <-- Добавлен импорт для A*
# --- ЭТАП 1: МОДЕЛЬ ---
class Cell:
def __init__(self, x, y, is_wall=False):
self.x = x
self.y = y
self.is_wall = is_wall
def isPassable(self):
return not self.is_wall
class Maze:
def __init__(self, width, height, grid):
self.width = width
self.height = height
self.grid = grid
self.start_cell = grid[0][0]
self.exit_cell = grid[height-1][width-1]
def getNeighbors(self, cell):
neighbors = []
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
for d in directions:
nx = cell.x + d[0]
ny = cell.y + d[1]
if nx >= 0 and nx < self.width and ny >= 0 and ny < self.height:
if not self.grid[ny][nx].is_wall:
neighbors.append(self.grid[ny][nx])
return neighbors
# --- ЭТАП 2: BUILDER ---
class MazeBuilder:
def buildFromFile(self, filename):
path = filename
if "docs/data/" not in path:
path = os.path.join("docs", "data", filename)
with open(path, 'r') as f:
lines = []
for line in f:
stripped = line.strip()
if stripped:
lines.append(stripped)
h = len(lines)
w = len(lines[0])
grid = []
for y in range(h):
row = []
for x in range(w):
is_wall = False
if x < len(lines[y]):
if lines[y][x] == '#':
is_wall = True
row.append(Cell(x, y, is_wall))
grid.append(row)
maze = Maze(w, h, grid)
for y in range(h):
for x in range(len(lines[y])):
if lines[y][x] == 'S':
maze.start_cell = maze.grid[y][x]
if lines[y][x] == 'E':
maze.exit_cell = maze.grid[y][x]
return maze
# --- ЭТАП 3: STRATEGY ---
class SearchStats:
def __init__(self, time_ms, visited, length):
self.time_ms = time_ms
self.visited = visited
self.length = length
class PathFindingStrategy(ABC):
@abstractmethod
def findPath(self, maze, start, exit):
pass
# 1. Поиск в ширину (BFS) - оригинальный алгоритм
class BFSStrategy(PathFindingStrategy):
def findPath(self, maze, start, exit):
queue = deque([start])
visited = {start: None}
while len(queue) > 0:
curr = queue.popleft()
if curr == exit:
break
for n in maze.getNeighbors(curr):
if n not in visited:
visited[n] = curr
queue.append(n)
path = []
curr = exit
while curr is not None:
path.append(curr)
curr = visited.get(curr)
return path[::-1], len(visited)
# 2. Поиск в глубину (DFS) - добавлен
class DFSStrategy(PathFindingStrategy):
def findPath(self, maze, start, exit):
stack = [start]
visited = {start: None}
while len(stack) > 0:
curr = stack.pop()
if curr == exit:
break
for n in maze.getNeighbors(curr):
if n not in visited:
visited[n] = curr
stack.append(n)
path = []
curr = exit
while curr is not None:
path.append(curr)
curr = visited.get(curr)
return path[::-1], len(visited)
# 3. Алгоритм A*
class AStarStrategy(PathFindingStrategy):
def findPath(self, maze, start, exit):
counter = 0
queue = [(0, counter, start)]
came_from = {start: None}
g_score = {start: 0}
while len(queue) > 0:
_, _, curr = heapq.heappop(queue)
if curr == exit:
break
for n in maze.getNeighbors(curr):
tentative_g_score = g_score[curr] + 1
if n not in g_score or tentative_g_score < g_score[n]:
came_from[n] = curr
g_score[n] = tentative_g_score
# Эвристика: Манхэттенское расстояние
f_score = tentative_g_score + abs(n.x - exit.x) + abs(n.y - exit.y)
counter += 1
heapq.heappush(queue, (f_score, counter, n))
path = []
curr = exit
while curr is not None:
path.append(curr)
curr = came_from.get(curr)
return path[::-1], len(came_from)
# --- ЭТАП 4: ORCHESTRATOR ---
class MazeSolver:
def __init__(self, maze, player=None):
self.maze = maze
self.player = player
self.observers = []
def attach(self, obs):
self.observers.append(obs)
def notify(self, event, data):
for o in self.observers:
o.update(event, data)
def solve(self, strat):
t0 = time.perf_counter()
path, visited = strat.findPath(self.maze, self.maze.start_cell, self.maze.exit_cell)
t1 = time.perf_counter()
return SearchStats((t1 - t0) * 1000, visited, len(path))
# --- ЭТАП 5: OBSERVER & COMMAND ---
class Player:
def __init__(self, cell):
self.current_cell = cell
class MoveCommand:
def __init__(self, player, dx, dy, maze):
self.player = player
self.dx = dx
self.dy = dy
self.maze = maze
def execute(self):
nx = self.player.current_cell.x + self.dx
ny = self.player.current_cell.y + self.dy
if nx >= 0 and nx < self.maze.width and ny >= 0 and ny < self.maze.height:
target = self.maze.grid[ny][nx]
if target.isPassable():
self.player.current_cell = target
return True
return False
class ConsoleView:
def update(self, event, data):
print(f"[INFO] {event.upper()}: {data}")
# --- ЗАПУСК ---
if __name__ == "__main__":
files = ["maze10-10.txt", "maze50-50.txt", "maze100-100.txt", "maze0.txt", "maze777.txt"]
mode = input("Эксперимент (e) или игра (i)? ").lower()
if mode == 'e':
# Обновленная таблица с колонкой "Метод"
print(f"{'Файл':<15} | {'Метод':<5} | {'Время(мс)':<10} | {'Посещено':<10} | {'Путь':<6}")
print("-" * 58)
for f in files:
try:
m = MazeBuilder().buildFromFile(f)
# Словарь с нашими тремя методами
strategies = {
"BFS": BFSStrategy(),
"DFS": DFSStrategy(),
"A*": AStarStrategy()
}
# Запускаем каждый метод для текущего лабиринта
for strat_name, strat_obj in strategies.items():
t_sum, v_sum, l_sum = 0, 0, 0
for _ in range(10):
s = MazeSolver(m).solve(strat_obj)
t_sum += s.time_ms
v_sum += s.visited
l_sum += s.length
print(f"{f:<15} | {strat_name:<5} | {t_sum/10:<10.2f} | {v_sum/10:<10.1f} | {l_sum/10:<6.1f}")
# Линия-разделитель между разными лабиринтами для удобства чтения
print("-" * 58)
except FileNotFoundError:
print(f"{f:<15} | ОШИБКА: Файл не найден")
print("-" * 58)
elif mode == 'i':
name = input("Имя файла: ")
m = MazeBuilder().buildFromFile(name)
p = Player(m.start_cell)
s = MazeSolver(m, p)
s.attach(ConsoleView())
while True:
cmd = input("WASD (q-выход): ").lower()
if cmd == 'q': break
dx, dy = 0, 0
if cmd == 'w': dy = -1
elif cmd == 'a': dx = -1
elif cmd == 's': dy = 1
elif cmd == 'd': dx = 1
if dx != 0 or dy != 0:
if MoveCommand(p, dx, dy, m).execute():
s.notify("move", f"Направление {cmd}, Координата ({p.current_cell.x}, {p.current_cell.y})")
else:
s.notify("error", "Стена!")

0
VolkovVA/docs/.gitkeep Normal file
View File

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,33 @@
import pandas as pd
import matplotlib.pyplot as plt
file_path = r'C:\Users\vva26\2026-rff_mp\VolkovVA\experiment_results.csv'
df = pd.read_csv(file_path)
grouped = df.groupby(['файл', 'стратегия'])[['время', 'посещено', 'длина']].mean()
unique_mazes = df['файл'].unique()
for maze in unique_mazes:
maze_data = grouped.loc[maze]
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 10))
fig.suptitle(f'Результаты для: {maze}', fontsize=14, fontweight='bold')
maze_data['время'].plot(kind='bar', ax=ax1, color='#3498db', title='Время (мс)')
maze_data['посещено'].plot(kind='bar', ax=ax2, color='#e74c3c', title='Посещено клеток')
maze_data['длина'].plot(kind='bar', ax=ax3, color='#2ecc71', title='Длина пути')
for ax in [ax1, ax2, ax3]:
ax.grid(axis='y', linestyle='--', alpha=0.5)
ax.set_ylabel('Значение')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()

View File

@ -0,0 +1,7 @@
S##....
..##..#
#.#..#.
#....##
#..#...
.#..##.
.##..E#

View File

@ -0,0 +1,15 @@
S..............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
..............E

View File

@ -0,0 +1,10 @@
S......#..
.#..######
.##.....#
.#####..##
..#####...
#.#####.##
#....#....
##.##..#.#
##..###...
###......E

View File

@ -0,0 +1,102 @@
S......................................................................................................
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...##..##...##.##.###.#.#.#.###....####.
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#....
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...##..##...##.##.###.#.#.#.###....####.
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....
...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..
#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...E

View File

@ -0,0 +1,50 @@
S..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....#.#..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..#..###.#.##.
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
#..##..##..##..##..##..##..##..##..##..##..##..##
..##..##..##..##..##..##..##..##..##..##..##..##.
#....###..##..#..##..##..##..##..##..##..##..##..
E.##..###...#####################################

View File

@ -0,0 +1,9 @@
S........
#########
#.......#
#.#####.#
#.#####.#
#.#####.#
#.......#
#########
.........

Binary file not shown.

View File

@ -0,0 +1,151 @@
файл,стратегия,время,посещено,длина
docs/data/maze10-10.txt,BFS,0.13980000005631155,50,19
docs/data/maze10-10.txt,A*,0.12270000001990411,0,19
docs/data/maze10-10.txt,DFS,0.14279999993505044,0,19
docs/data/maze50-50.txt,BFS,0.4360000000360742,189,51
docs/data/maze50-50.txt,A*,0.48679999997602863,0,51
docs/data/maze50-50.txt,DFS,0.56449999999586,0,51
docs/data/maze100-100.txt,BFS,9.481400000026952,4307,202
docs/data/maze100-100.txt,A*,22.84780000002229,0,202
docs/data/maze100-100.txt,DFS,0.9094999999206266,0,250
docs/data/maze0.txt,BFS,0.39909999998144485,225,29
docs/data/maze0.txt,A*,0.20979999999326537,0,29
docs/data/maze0.txt,DFS,0.34410000000661967,0,113
docs/data/maze777.txt,BFS,0.018299999965165625,9,0
docs/data/maze777.txt,A*,0.029300000051080133,0,0
docs/data/maze777.txt,DFS,0.02069999993636884,0,0
docs/data/maze10-10.txt,BFS,0.09119999992890371,50,19
docs/data/maze10-10.txt,A*,0.08239999999659631,0,19
docs/data/maze10-10.txt,DFS,0.10770000005777547,0,19
docs/data/maze50-50.txt,BFS,0.3368999999793232,189,51
docs/data/maze50-50.txt,A*,0.3643000000010943,0,51
docs/data/maze50-50.txt,DFS,0.44330000002901215,0,51
docs/data/maze100-100.txt,BFS,7.226400000035937,4307,202
docs/data/maze100-100.txt,A*,34.41669999995156,0,202
docs/data/maze100-100.txt,DFS,1.3289999999415159,0,250
docs/data/maze0.txt,BFS,0.7290000000921282,225,29
docs/data/maze0.txt,A*,0.4122000000279513,0,29
docs/data/maze0.txt,DFS,0.6503999999267762,0,113
docs/data/maze777.txt,BFS,0.03519999995660328,9,0
docs/data/maze777.txt,A*,0.05659999999352294,0,0
docs/data/maze777.txt,DFS,0.03839999999399879,0,0
docs/data/maze10-10.txt,BFS,0.18600000009882933,50,19
docs/data/maze10-10.txt,A*,0.15550000000530417,0,19
docs/data/maze10-10.txt,DFS,0.1988000000210377,0,19
docs/data/maze50-50.txt,BFS,0.6270999999742344,189,51
docs/data/maze50-50.txt,A*,0.6978999999773805,0,51
docs/data/maze50-50.txt,DFS,0.8395999999493142,0,51
docs/data/maze100-100.txt,BFS,7.187100000010105,4307,202
docs/data/maze100-100.txt,A*,23.021700000072087,0,202
docs/data/maze100-100.txt,DFS,0.9118000000398752,0,250
docs/data/maze0.txt,BFS,0.40369999999256834,225,29
docs/data/maze0.txt,A*,0.2121999999644686,0,29
docs/data/maze0.txt,DFS,0.34430000005158945,0,113
docs/data/maze777.txt,BFS,0.01770000005762995,9,0
docs/data/maze777.txt,A*,0.029400000016721606,0,0
docs/data/maze777.txt,DFS,0.020199999994474638,0,0
docs/data/maze10-10.txt,BFS,0.09029999989706994,50,19
docs/data/maze10-10.txt,A*,0.08790000003955356,0,19
docs/data/maze10-10.txt,DFS,0.10560000009718351,0,19
docs/data/maze50-50.txt,BFS,0.3318000000263055,189,51
docs/data/maze50-50.txt,A*,0.365399999964211,0,51
docs/data/maze50-50.txt,DFS,0.44709999997394334,0,51
docs/data/maze100-100.txt,BFS,7.311000000072454,4307,202
docs/data/maze100-100.txt,A*,23.127100000010614,0,202
docs/data/maze100-100.txt,DFS,0.9203999999272128,0,250
docs/data/maze0.txt,BFS,0.4126999999698455,225,29
docs/data/maze0.txt,A*,0.2103000000488464,0,29
docs/data/maze0.txt,DFS,0.3492999999252788,0,113
docs/data/maze777.txt,BFS,0.018800000020746666,9,0
docs/data/maze777.txt,A*,0.02999999992425728,0,0
docs/data/maze777.txt,DFS,0.020500000005085894,0,0
docs/data/maze10-10.txt,BFS,0.09060000002136803,50,19
docs/data/maze10-10.txt,A*,0.08270000000720756,0,19
docs/data/maze10-10.txt,DFS,0.10610000003907771,0,19
docs/data/maze50-50.txt,BFS,0.332400000047528,189,51
docs/data/maze50-50.txt,A*,0.3665999998929692,0,51
docs/data/maze50-50.txt,DFS,0.44870000010632793,0,51
docs/data/maze100-100.txt,BFS,7.21649999991314,4307,202
docs/data/maze100-100.txt,A*,22.780499999953463,0,202
docs/data/maze100-100.txt,DFS,0.9168999999928928,0,250
docs/data/maze0.txt,BFS,0.3987000000051921,225,29
docs/data/maze0.txt,A*,0.21000000003823516,0,29
docs/data/maze0.txt,DFS,0.3508999999439766,0,113
docs/data/maze777.txt,BFS,0.018199999999524152,9,0
docs/data/maze777.txt,A*,0.029400000016721606,0,0
docs/data/maze777.txt,DFS,0.02040000003944442,0,0
docs/data/maze10-10.txt,BFS,0.0906999999870095,50,19
docs/data/maze10-10.txt,A*,0.0809999999091815,0,19
docs/data/maze10-10.txt,DFS,0.10750000001280569,0,19
docs/data/maze50-50.txt,BFS,0.3272999999808235,189,51
docs/data/maze50-50.txt,A*,0.3616999999849213,0,51
docs/data/maze50-50.txt,DFS,0.4390000000284999,0,51
docs/data/maze100-100.txt,BFS,7.174899999995432,4307,202
docs/data/maze100-100.txt,A*,23.44289999996363,0,202
docs/data/maze100-100.txt,DFS,0.9183000000803077,0,250
docs/data/maze0.txt,BFS,0.4030999999713458,225,29
docs/data/maze0.txt,A*,0.21209999999882712,0,29
docs/data/maze0.txt,DFS,0.46320000001287553,0,113
docs/data/maze777.txt,BFS,0.02210000002378365,9,0
docs/data/maze777.txt,A*,0.03309999999601132,0,0
docs/data/maze777.txt,DFS,0.02210000002378365,0,0
docs/data/maze10-10.txt,BFS,0.09740000007241179,50,19
docs/data/maze10-10.txt,A*,0.087499999949614,0,19
docs/data/maze10-10.txt,DFS,0.1125000000001819,0,19
docs/data/maze50-50.txt,BFS,0.4331999999749314,189,51
docs/data/maze50-50.txt,A*,0.517800000011448,0,51
docs/data/maze50-50.txt,DFS,0.6935000000112268,0,51
docs/data/maze100-100.txt,BFS,12.310899999988578,4307,202
docs/data/maze100-100.txt,A*,38.01999999996042,0,202
docs/data/maze100-100.txt,DFS,0.9072999999943931,0,250
docs/data/maze0.txt,BFS,0.4000000000132786,225,29
docs/data/maze0.txt,A*,0.2101999999695181,0,29
docs/data/maze0.txt,DFS,0.3702000000203043,0,113
docs/data/maze777.txt,BFS,0.0183999999308071,9,0
docs/data/maze777.txt,A*,0.029700000027332862,0,0
docs/data/maze777.txt,DFS,0.020599999970727367,0,0
docs/data/maze10-10.txt,BFS,0.08969999998953426,50,19
docs/data/maze10-10.txt,A*,0.08209999998598505,0,19
docs/data/maze10-10.txt,DFS,0.10669999994661339,0,19
docs/data/maze50-50.txt,BFS,0.32900000007884955,189,51
docs/data/maze50-50.txt,A*,0.3680999999460255,0,51
docs/data/maze50-50.txt,DFS,0.4397999999810054,0,51
docs/data/maze100-100.txt,BFS,7.20360000002529,4307,202
docs/data/maze100-100.txt,A*,23.009399999978086,0,202
docs/data/maze100-100.txt,DFS,0.9000999999670967,0,250
docs/data/maze0.txt,BFS,0.4022000000531989,225,29
docs/data/maze0.txt,A*,0.21179999998821586,0,29
docs/data/maze0.txt,DFS,0.34610000000157015,0,113
docs/data/maze777.txt,BFS,0.018199999999524152,9,0
docs/data/maze777.txt,A*,0.029400000016721606,0,0
docs/data/maze777.txt,DFS,0.020500000005085894,0,0
docs/data/maze10-10.txt,BFS,0.0902000000451153,50,19
docs/data/maze10-10.txt,A*,0.08200000002034358,0,19
docs/data/maze10-10.txt,DFS,0.10699999995722465,0,19
docs/data/maze50-50.txt,BFS,0.3285000000232685,189,51
docs/data/maze50-50.txt,A*,0.3623000000061438,0,51
docs/data/maze50-50.txt,DFS,0.44489999993402307,0,51
docs/data/maze100-100.txt,BFS,7.137999999940803,4307,202
docs/data/maze100-100.txt,A*,23.82749999992484,0,202
docs/data/maze100-100.txt,DFS,0.9092999999893436,0,250
docs/data/maze0.txt,BFS,0.40109999997639534,225,29
docs/data/maze0.txt,A*,0.21259999994072132,0,29
docs/data/maze0.txt,DFS,0.35370000000511936,0,113
docs/data/maze777.txt,BFS,0.018800000020746666,9,0
docs/data/maze777.txt,A*,0.02959999994800455,0,0
docs/data/maze777.txt,DFS,0.020599999970727367,0,0
docs/data/maze10-10.txt,BFS,0.09130000000823202,50,19
docs/data/maze10-10.txt,A*,0.08169999989604548,0,19
docs/data/maze10-10.txt,DFS,0.10639999993600213,0,19
docs/data/maze50-50.txt,BFS,0.33389999998689746,189,51
docs/data/maze50-50.txt,A*,0.37159999999403226,0,51
docs/data/maze50-50.txt,DFS,0.4456000000345739,0,51
docs/data/maze100-100.txt,BFS,7.356800000025032,4307,202
docs/data/maze100-100.txt,A*,23.18609999997534,0,202
docs/data/maze100-100.txt,DFS,0.906800000052499,0,250
docs/data/maze0.txt,BFS,0.3977000000077169,225,29
docs/data/maze0.txt,A*,0.20969999991393706,0,29
docs/data/maze0.txt,DFS,0.3464999999778229,0,113
docs/data/maze777.txt,BFS,0.01810000003388268,9,0
docs/data/maze777.txt,A*,0.029799999992974335,0,0
docs/data/maze777.txt,DFS,0.020199999994474638,0,0
Internal Server Error - DRE.lab repo

Internal Server Error

Gitea Version: 1.22.0