#include "sliding_tile_lib.h"
+#include <cstdlib>
#include <istream>
#include <ostream>
#include <stdexcept>
}
throw std::runtime_error("Board with no hole");
}
+
+InvertedBoard Board::invert() const {
+ InvertedBoard inv;
+ for (int i = 0; i < BOARD_SIZE; i++) {
+ inv.pos[board[i]] = i;
+ }
+ return inv;
+}
+
+int Board::distance(const Board& o) const {
+ return distance(o.invert());
+}
+
+int Board::distance(const InvertedBoard& invo) const {
+ int dist = 0;
+ for (int i = 0; i < BOARD_SIZE; i++) {
+ dist += std::abs(i % BOARD_DIM - invo.pos[board[i]] % BOARD_DIM) +
+ std::abs(i / BOARD_DIM - invo.pos[board[i]] / BOARD_DIM);
+ }
+ return dist;
+}