2 个版本 (1 个稳定版)
1.0.0 | 2023年4月23日 |
---|---|
0.1.0 | 2023年4月12日 |
#1 in #tour
12KB
247 行
Prancing Pony
即使是外观,这个旅馆看起来也是一户熟悉眼睛的宜人家庭。门上方的标牌上画着一匹肥大的白马用它后腿站立。门上漆有字母: 巴里曼·波塔球之跳跃的马。
Prancing Pony 是使用回溯策略实现的骑士之旅的简单实现,适用于可变大小的棋盘和可变起始位置。它保证找到解决方案,并且如果给定的参数没有可能的之旅,它将立即知道。
由于这是一个蛮力且直观的 O(n!) 解决方案,所以不应该期望在大多数配置中在给定的参数中找到结果,但是它对于小于40个方格的小棋盘或以(0,0)位置开始的8x8大小传统棋盘应该表现良好。
用法
let tour_input = prancing_pony::TourInput {
size_x: 8,
size_y: 8,
starting_position: (0,0)
};
let result = prancing_pony::find_solution(tour_input);
match result {
prancing_pony::TourResult::Solution(t) => {
println!("Solution found in {} nanoseconds after {} backtracks", t.calculation_time, t.times_backtracked);
for (index, position) in t.position_history.iter().enumerate() {
println!("{} - ({} {})", index, position.0, position.1);
}
},
prancing_pony::TourResult::NoSolution => { println!("No Solution"); },
prancing_pony::TourResult::InvalidParameters => { println!("Invalid Parameters"); }
}