public int slidingPuzzle(int[][] board) {
if (board == null || board.length == 0) {
String target = "123450";
StringBuilder sb = new StringBuilder();
for (int[] row : board) {
String start = sb.toString();
Set<String> visited = new HashSet<>();
Queue<String> queue = new LinkedList<>();
int[] directions = {-1, 1, -3, 3};
while (!queue.isEmpty()) {
for (int i = 0; i < size; i++) {
String curState = queue.remove();
if (curState.equals(target)) {
int startIndex = curState.indexOf('0');
for (int k = 0; k < 4; k++) {
int nextIndex = startIndex + directions[k];
if (isValid(startIndex, nextIndex)) {
char[] letters = curState.toCharArray();
swap(letters, startIndex, nextIndex);
String nextState = String.valueOf(letters);
if (!visited.contains(nextState)) {
public boolean isValid(int index1, int index2) {
if (index2 < 0 || index2 > 5 || index1 == 2 && index2 == 3 || index1 == 3 && index2 == 2) {
public void swap(char[] letters, int i, int j) {