Иметь ДВА класса на Java для 8 Решить головоломку?
Я пытаюсь решить 8 головоломок с помощью A* в Java. Я прочитал об этом здесь Решение 8 головоломок с помощью алгоритма A*.
Я создаю доску типа данных с таким API
public Board(int[][] tiles) // create a board from an n-by-n array of tiles,
// where tiles[row][col] = tile at (row, col)
public String toString() // string representation of this board
public int tileAt(int row, int col) // tile at (row, col) or 0 if blank
public int size() // board size n
public int hamming() // number of tiles out of place
public int manhattan() // sum of Manhattan distances between tiles and goal
public boolean isGoal() // is this board the goal board?
public boolean equals(Object y) // does this board equal y?
public Iterable<Board> neighbors() // all neighboring boards
public boolean isSolvable() // is this board solvable?
public static void main(String[] args) // unit testing (required)
}
(согласно) https://www.cs.princeton.edu/courses/archive/spr18/cos226/assignments/8puzzle/index.html.
Я не понимаю, почему мне нужно иметь ДВА Java-класса, Board и Solver. Я понимаю, что класс Board будет иметь бесчисленное количество методов для хамминга, манхэттенского расстояния и т.д. Но почему? Я знаю, что будет создано несколько объектов на доске, каждый из которых будет представлять различное состояние головоломки "8 Решений" с различными присутствующими плитками, но зачем мне два класса? Как именно класс решателя будет решать и реализовывать / использовать класс Board? Спасибо.