diff --git a/VolkovVA/cod.py b/VolkovVA/cod.py index 2896c98..eea2dfc 100644 --- a/VolkovVA/cod.py +++ b/VolkovVA/cod.py @@ -1,230 +1,253 @@ +import time, os from collections import deque -import heapq -import time from abc import ABC, abstractmethod +import heapq # <-- Добавлен импорт для A* -# Модель +# --- ЭТАП 1: МОДЕЛЬ --- class Cell: - def __init__(self, x, y, is_wall=False, is_start=False, is_exit=False): + def __init__(self, x, y, is_wall=False): self.x = x self.y = y self.is_wall = is_wall - self.is_start = is_start - self.is_exit = is_exit - self.visited = False - - def is_passable(self): + def isPassable(self): return not self.is_wall -class Player: - def __init__(self, start_cell): - self.current_cell = start_cell - class Maze: - def __init__(self, width, height): + def __init__(self, width, height, grid): self.width = width self.height = height - self.cells = [[Cell(x, y) for x in range(width)] for y in range(height)] - self.start_cell = self.cells[0][0] - self.exit_cell = self.cells[height-1][width-1] - - def get_cell(self, x, y): - if 0 <= x < self.width and 0 <= y < self.height: - return self.cells[y][x] - return None - - def get_neighbors(self, cell): + 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 dx, dy in directions: - neighbor = self.get_cell(cell.x + dx, cell.y + dy) - if neighbor and neighbor.is_passable(): - neighbors.append(neighbor) + 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): - with open(filename, 'r') as f: - lines = f.readlines() - height = len(lines) - width = len(lines[0].strip()) - maze = Maze(width, height) - for y, line in enumerate(lines): - for x, char in enumerate(line.strip()): - cell = maze.get_cell(x, y) - if char == '#': cell.is_wall = True - elif char == 'S': - cell.is_start = True - maze.start_cell = cell - elif char == 'E': - cell.is_exit = True - maze.exit_cell = cell - if not maze.start_cell or not maze.exit_cell: - raise ValueError("Лабиринт сломан") + 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 -# Strategy -class PathFindingStrategy: - def findPath(self, maze, start, exit): - raise NotImplementedError("Этот метод должен быть реализован в стратегии!") - - def _reconstruct_path(self, parents, current): - path = [] - while current: - path.append(current) - current = parents.get(current) - return path[::-1] - -class Command(ABC): - @abstractmethod - def execute(self): pass - @abstractmethod - def undo(self): pass - -class MoveCommand(Command): - def __init__(self, player, dx, dy, maze): - self.player = player - self.dx = dx - self.dy = dy - self.maze = maze - self.prev_cell = None - - def execute(self): - self.prev_cell = self.player.current_cell - target = self.maze.get_cell(self.prev_cell.x + self.dx, self.prev_cell.y + self.dy) - if target and target.is_passable(): - self.player.current_cell = target - return True - return False - - def undo(self): - self.player.current_cell = self.prev_cell - -class BFSStrategy(PathFindingStrategy): - def findPath(self, maze, start, exit): - queue = deque([start]) - parents = {start: None} - start.visited = True - while queue: - current = queue.popleft() - if current == exit: - return self._reconstruct_path(parents, exit) - for neighbor in maze.get_neighbors(current): - if not neighbor.visited: - neighbor.visited = True - parents[neighbor] = current - queue.append(neighbor) - return [] - -class AStarStrategy(PathFindingStrategy): - def _heuristic(self, a, b): - return abs(a.x - b.x) + abs(a.y - b.y) - - def findPath(self, maze, start, exit): - heap = [(0, start)] - parents = {start: None} - g_score = {start: 0} - while heap: - _, current = heapq.heappop(heap) - if current == exit: - return self._reconstruct_path(parents, exit) - for neighbor in maze.get_neighbors(current): - new_g = g_score[current] + 1 - if new_g < g_score.get(neighbor, float('inf')): - parents[neighbor] = current - g_score[neighbor] = new_g - f = new_g + self._heuristic(neighbor, exit) - heapq.heappush(heap, (f, neighbor)) - return [] - -# Статистика +# --- ЭТАП 3: STRATEGY --- class SearchStats: def __init__(self, time_ms, visited, length): self.time_ms = time_ms self.visited = visited self.length = length -# Паттерн Observer -class Observer(ABC): +class PathFindingStrategy(ABC): @abstractmethod - def update(self, event: str, data=None): + def findPath(self, maze, start, exit): pass -class ConsoleView(Observer): - def update(self, event: str, data=None): - if event == "path_found": - print(f"Событие '{event}': время={data.time_ms:.2f}мс, посещено={data.visited}, путь={data.length}") - elif event == "player_moved": - print(f"Игрок переместился в: ({data.x}, {data.y})") - elif event == "error": - print(f"Ошибка: {data}") +# 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) -# --- 6. Оркестратор (MazeSolver) --- +# 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): + def __init__(self, maze, player=None): self.maze = maze self.player = player - self.strat = None - self._observers = [] - self._history = [] # Стек для undo - - def attach(self, observer): - self._observers.append(observer) - - def notify(self, event, data=None): - for obs in self._observers: - obs.update(event, data) - - # Метод для ручного управления (Command) - def move_player(self, dx, dy): - cmd = MoveCommand(self.player, dx, dy, self.maze) - if cmd.execute(): - self._history.append(cmd) - self.notify("player_moved", self.player.current_cell) - else: - self.notify("error", "Стена!") - - def undo_move(self): - if self._history: - cmd = self._history.pop() - cmd.undo() - self.notify("player_moved", self.player.current_cell) - - def solve(self): - if not self.strat: return None - + 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 = self.strat.findPath(self.maze, self.maze.start_cell, self.maze.exit_cell) + path, visited = strat.findPath(self.maze, self.maze.start_cell, self.maze.exit_cell) t1 = time.perf_counter() - - visited_count = sum(c.visited for row in self.maze.cells for c in row) - stats = SearchStats((t1 - t0) * 1000, visited_count, len(path)) - self.notify("path_found", stats) - return stats + 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__": - maze = Maze(10, 10) - player = Player(maze.start_cell) - solver = MazeSolver(maze, player) - solver.attach(ConsoleView()) - - solver.move_player(1, 0) - solver.undo_move() + files = ["maze10-10.txt", "maze50-50.txt", "maze100-100.txt", "maze0.txt", "maze777.txt"] + mode = input("Эксперимент (e) или игра (i)? ").lower() - print("Используйте WASD для движения, Z для отмены хода, Q для выхода") - while True: - cmd = input("Введите команду: ").lower() - if cmd == 'd': - solver.move_player(1, 0) - elif cmd == 'a': - solver.move_player(-1, 0) - elif cmd == 's': - solver.move_player(0, 1) - elif cmd == 'w': - solver.move_player(0, -1) - elif cmd == 'z': - solver.undo_move() - elif cmd == 'q': - break \ No newline at end of file + 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", "Стена!") \ No newline at end of file diff --git a/VolkovVA/docs/data/Figure 2026-05-25 211350.png b/VolkovVA/docs/data/Figure 2026-05-25 211350.png new file mode 100644 index 0000000..c902c36 Binary files /dev/null and b/VolkovVA/docs/data/Figure 2026-05-25 211350.png differ diff --git a/VolkovVA/docs/data/Figure 2026-05-25 211427.png b/VolkovVA/docs/data/Figure 2026-05-25 211427.png new file mode 100644 index 0000000..16c603c Binary files /dev/null and b/VolkovVA/docs/data/Figure 2026-05-25 211427.png differ diff --git a/VolkovVA/docs/data/Figure 2026-05-25 211458.png b/VolkovVA/docs/data/Figure 2026-05-25 211458.png new file mode 100644 index 0000000..c0052fc Binary files /dev/null and b/VolkovVA/docs/data/Figure 2026-05-25 211458.png differ diff --git a/VolkovVA/docs/data/Figure 2026-05-25 211518.png b/VolkovVA/docs/data/Figure 2026-05-25 211518.png new file mode 100644 index 0000000..37961ac Binary files /dev/null and b/VolkovVA/docs/data/Figure 2026-05-25 211518.png differ diff --git a/VolkovVA/docs/data/Figure 2026-05-25 211529.png b/VolkovVA/docs/data/Figure 2026-05-25 211529.png new file mode 100644 index 0000000..0097ef4 Binary files /dev/null and b/VolkovVA/docs/data/Figure 2026-05-25 211529.png differ diff --git a/VolkovVA/docs/data/grafic's.py b/VolkovVA/docs/data/grafic's.py new file mode 100644 index 0000000..ef60371 --- /dev/null +++ b/VolkovVA/docs/data/grafic's.py @@ -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() \ No newline at end of file diff --git a/VolkovVA/docs/data/maze.txt b/VolkovVA/docs/data/maze.txt new file mode 100644 index 0000000..0323230 --- /dev/null +++ b/VolkovVA/docs/data/maze.txt @@ -0,0 +1,7 @@ +S##.... +..##..# +#.#..#. +#....## +#..#... +.#..##. +.##..E# \ No newline at end of file diff --git a/VolkovVA/docs/data/maze0.txt b/VolkovVA/docs/data/maze0.txt new file mode 100644 index 0000000..b04b51c --- /dev/null +++ b/VolkovVA/docs/data/maze0.txt @@ -0,0 +1,15 @@ +S.............. +............... +............... +............... +............... +............... +............... +............... +............... +............... +............... +............... +............... +............... +..............E \ No newline at end of file diff --git a/VolkovVA/docs/data/maze10-10.txt b/VolkovVA/docs/data/maze10-10.txt new file mode 100644 index 0000000..90f6132 --- /dev/null +++ b/VolkovVA/docs/data/maze10-10.txt @@ -0,0 +1,10 @@ +S......#.. +.#..###### +.##.....# +.#####..## +..#####... +#.#####.## +#....#.... +##.##..#.# +##..###... +###......E \ No newline at end of file diff --git a/VolkovVA/docs/data/maze100-100.txt b/VolkovVA/docs/data/maze100-100.txt new file mode 100644 index 0000000..5ce79b0 --- /dev/null +++ b/VolkovVA/docs/data/maze100-100.txt @@ -0,0 +1,102 @@ +S...................................................................................................... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.# +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...##..##...##.##.###.#.#.#.###....####. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +..#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +#.#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#.... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...##..##...##.##.###.#.#.#.###....####. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.... +...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#... +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#....##...#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.. +#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...E + + diff --git a/VolkovVA/docs/data/maze50-50.txt b/VolkovVA/docs/data/maze50-50.txt new file mode 100644 index 0000000..a1b5a6a --- /dev/null +++ b/VolkovVA/docs/data/maze50-50.txt @@ -0,0 +1,50 @@ +S..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....#.#..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..#..###.#.##. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +#..##..##..##..##..##..##..##..##..##..##..##..## +..##..##..##..##..##..##..##..##..##..##..##..##. +#....###..##..#..##..##..##..##..##..##..##..##.. +E.##..###...##################################### + diff --git a/VolkovVA/docs/data/maze777.txt b/VolkovVA/docs/data/maze777.txt new file mode 100644 index 0000000..c5873c9 --- /dev/null +++ b/VolkovVA/docs/data/maze777.txt @@ -0,0 +1,9 @@ +S........ +######### +#.......# +#.#####.# +#.#####.# +#.#####.# +#.......# +######### +......... \ No newline at end of file diff --git a/VolkovVA/docs/отчет.pdf b/VolkovVA/docs/отчет.pdf new file mode 100644 index 0000000..77114c3 Binary files /dev/null and b/VolkovVA/docs/отчет.pdf differ diff --git a/VolkovVA/experiment_results.csv b/VolkovVA/experiment_results.csv new file mode 100644 index 0000000..b812e00 --- /dev/null +++ b/VolkovVA/experiment_results.csv @@ -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