40 lines
1.2 KiB
C++
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);
|
|
} |