forked from UNN/2026-rff_mp
94 lines
1.9 KiB
Python
94 lines
1.9 KiB
Python
import csv
|
|
import os
|
|
|
|
from maze_solver import (
|
|
TextFileMazeBuilder,
|
|
MazeSolver,
|
|
BFSStrategy,
|
|
DFSStrategy,
|
|
AStarStrategy
|
|
)
|
|
|
|
REPEATS = 5
|
|
|
|
MAZES = [
|
|
"simple.txt",
|
|
"dead.txt",
|
|
"large.txt",
|
|
"empty.txt",
|
|
"noexit.txt"
|
|
]
|
|
|
|
STRATEGIES = [
|
|
("BFS", BFSStrategy()),
|
|
("DFS", DFSStrategy()),
|
|
("A*", AStarStrategy())
|
|
]
|
|
|
|
def average(values):
|
|
return sum(values) / len(values)
|
|
|
|
def run():
|
|
builder = TextFileMazeBuilder()
|
|
results = []
|
|
|
|
for maze_name in MAZES:
|
|
filename = os.path.join("lab2", "mazes", maze_name)
|
|
|
|
print("Maze:", maze_name)
|
|
|
|
for strategy_name, strategy in STRATEGIES:
|
|
times = []
|
|
visited = []
|
|
path_lengths = []
|
|
|
|
for _ in range(REPEATS):
|
|
maze = builder.build_from_file(filename)
|
|
|
|
solver = MazeSolver(maze, strategy)
|
|
stats = solver.solve()
|
|
|
|
times.append(stats.time_ms)
|
|
visited.append(stats.visited_count)
|
|
path_lengths.append(stats.path_length)
|
|
|
|
results.append([
|
|
maze_name,
|
|
strategy_name,
|
|
average(times),
|
|
average(visited),
|
|
average(path_lengths)
|
|
])
|
|
|
|
print(
|
|
strategy_name,
|
|
"time =", average(times),
|
|
"visited =", average(visited),
|
|
"path =", average(path_lengths)
|
|
)
|
|
|
|
os.makedirs("lab2/docs/data", exist_ok=True)
|
|
|
|
with open(
|
|
"lab2/docs/data/results.csv",
|
|
"w",
|
|
newline="",
|
|
encoding="utf-8"
|
|
) as file:
|
|
writer = csv.writer(file)
|
|
|
|
writer.writerow([
|
|
"maze",
|
|
"strategy",
|
|
"time_ms",
|
|
"visited_cells",
|
|
"path_length"
|
|
])
|
|
|
|
writer.writerows(results)
|
|
|
|
print("Results saved to lab2/docs/data/results.csv")
|
|
|
|
if __name__ == "__main__":
|
|
run()
|