编号为1~8的正方形方块摆成3行3列,每次可以把与空格相邻的滑块移动到空格中,而原来的位置就成为了新的空格,给定初始局面和目标局面,计算出最少的移动步数。
2 | 6 | 4 |
1 | 3 | 7 |
5 | 8 |
2 6 4 1 3 7 0 5 8
2 6 4 1 3 0 5 8 7
2 6 4 1 3 7 0 5 8
8 1 5 7 3 6 4 0 2
样例输出:
3
31
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
class State{
int[] s;
public State(int []s){
this.s=s;
}
public int hashCode(){
StringBuffer str=new StringBuffer();
for(int i:s)
str.append(i);
return Integer.parseInt(str.toString());
}
public boolean equals(Object obj){
State temp=(State)obj;
if(this.hashCode()=