maze-cpp/demos/DeadEnds.cpp

40 lines
1.2 KiB
C++

#include <iostream>
#include <vector>
#include <numeric>
#include "Grid.h"
#include "algorithms/AldousBroder.h"
#include "algorithms/BinaryTree.h"
#include "algorithms/Sidewinder.h"
#include "algorithms/HuntAndKill.h"
#include "algorithms/Wilsons.h"
#include "algorithms/RecursiveBacktracker.h"
void test(const std::string& alg, void(*on)(Grid&)) {
int tries = 100;
int size = 20;
std::vector<int> dead_end_counts;
for (int i = 0; i < tries; i++) {
Grid grid(size, size);
on(grid);
dead_end_counts.push_back(grid.deadEnds().size());
}
std::cout << alg << " " << std::accumulate(dead_end_counts.begin(), dead_end_counts.end(), 0) / dead_end_counts.size()
<< " (" << *std::min_element(dead_end_counts.begin(), dead_end_counts.end())
<< ", " << *std::max_element(dead_end_counts.begin(), dead_end_counts.end())
<< ")" << std::endl;
}
void recursive_backtracker(Grid& grid) {
RecursiveBacktracker::on(grid);
}
int main() {
test("AldousBroder", AldousBroder::on);
test("BinaryTree", BinaryTree::on);
test("Sidewinder", Sidewinder::on);
test("HuntAndKill", HuntAndKill::on);
test("Wilsons", Wilsons::on);
test("RecursiveBacktracker", recursive_backtracker);
}