-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathSliding Puzzle.java
64 lines (49 loc) · 1.53 KB
/
Sliding Puzzle.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Runtime: 22 ms (Top 35.42%) | Memory: 44.4 MB (Top 46.82%)
class Solution {
int [][] dir={{1,3},{0,2,4},{1,5},{0,4},{1,3,5},{2,4}};
public int slidingPuzzle(int[][] board) {
String tar="123450";
String src="";
for(int i =0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
src+=board[i][j];
}
}
HashSet<String> visited=new HashSet<>();
visited.add(src);
int level=0;
ArrayDeque<String> q=new ArrayDeque<>();
q.add(src);
while(q.size()!=0){
int t=q.size();
while(t-->0){
String rem=q.remove();
if(rem.equals(tar)){
return level;
}
int idx=-1;
for(int i=0;i<rem.length();i++){
if(rem.charAt(i)=='0'){
idx=i;
break;
}
}
for(int i =0;i<dir[idx].length;i++){
String str=swapEle(rem,idx,dir[idx][i]);
if(!visited.contains(str)){
q.add(str);
visited.add(str);
}
}
}
level++;
}
return -1;
}
public String swapEle(String rem,int i,int j){
StringBuilder sb=new StringBuilder(rem);
sb.setCharAt(i,rem.charAt(j));
sb.setCharAt(j,rem.charAt(i));
return sb.toString();
}
}