Skip to content

Commit 24e79d2

Browse files
authored
Create 773. Sliding Puzzle
1 parent 88af081 commit 24e79d2

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

773. Sliding Puzzle

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Solution {
2+
public:
3+
4+
pair<int, int>Finding_The_IndexOf_cell(vector<vector<int>>board){
5+
int x,y;
6+
for(int i = 0; i < 2 ;i++)
7+
for(int j = 0;j < 3; j++)
8+
if(!board[i][j])x = i, y = j;
9+
10+
return {x, y};
11+
}
12+
13+
int slidingPuzzle(vector<vector<int>>& board) {
14+
15+
int dx[4]{1, -1, 0, 0}, dy[4]{0, 0, 1, -1}; // 4 neighbours cells
16+
map<vector<vector<int>> ,int>vis;
17+
queue<vector<vector<int>>>q;
18+
q.push(board);
19+
20+
//BFS
21+
while(q.size()){
22+
auto cur_board = q.front(); q.pop();
23+
24+
if(cur_board[0][0] == 1 && // Wining Case
25+
cur_board[0][1] == 2 &&
26+
cur_board[0][2] == 3 &&
27+
cur_board[1][0] == 4 &&
28+
cur_board[1][1] == 5 &&
29+
!cur_board[1][2]){
30+
return vis[cur_board];
31+
}
32+
33+
auto last_board = cur_board;
34+
auto [x,y] = Finding_The_IndexOf_cell(cur_board);
35+
36+
for(int i = 0;i < 4; i++){ // Try 4 neighbours cells
37+
int x2 = x + dx[i] , y2 = y + dy[i];
38+
39+
if(x2 >= 0 && x2 < 2 && y2 >= 0 && y2 < 3){
40+
swap(cur_board[x][y], cur_board[x2][y2]); //Do
41+
42+
if(!vis.count(cur_board)){
43+
vis[cur_board] = vis[last_board] + 1,
44+
q.push(cur_board);
45+
}
46+
47+
swap(cur_board[x][y], cur_board[x2][y2]);
48+
//(backtracking)
49+
}
50+
}
51+
}
52+
53+
return -1;
54+
}
55+
};

0 commit comments

Comments
 (0)