From 2144825fab7f8ac16fdacee99fc6f6e031837661 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Nov 2024 09:28:05 +0800 Subject: [PATCH] Add solution and test-cases for problem 773 --- leetcode/701-800/0773.Sliding-Puzzle/1.jpg | Bin 0 -> 4841 bytes leetcode/701-800/0773.Sliding-Puzzle/2.jpg | Bin 0 -> 4847 bytes leetcode/701-800/0773.Sliding-Puzzle/3.jpg | Bin 0 -> 4893 bytes .../701-800/0773.Sliding-Puzzle/README.md | 46 ++++++++++---- .../701-800/0773.Sliding-Puzzle/Solution.go | 60 +++++++++++++++++- .../0773.Sliding-Puzzle/Solution_test.go | 14 ++-- 6 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/1.jpg create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/2.jpg create mode 100644 leetcode/701-800/0773.Sliding-Puzzle/3.jpg diff --git a/leetcode/701-800/0773.Sliding-Puzzle/1.jpg b/leetcode/701-800/0773.Sliding-Puzzle/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bffca2276dbccde16dbc4815b7584c98711d49b GIT binary patch literal 4841 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 Cz4yxi literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/2.jpg b/leetcode/701-800/0773.Sliding-Puzzle/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93f8a7efa80557744685778a50a47c867a8fc9ef GIT binary patch literal 4847 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/README.md b/leetcode/701-800/0773.Sliding-Puzzle/README.md index d2ab9e31b..c632167f6 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/README.md +++ b/leetcode/701-800/0773.Sliding-Puzzle/README.md @@ -1,28 +1,48 @@ # [773.Sliding Puzzle][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +On an `2 x 3` board, there are five tiles labeled from `1` to `5`, and an empty square represented by `0`. A **move** consists of choosing `0` and a 4-directionally adjacent number and swapping it. + +The state of the board is solved if and only if the board is `[[1,2,3],[4,5,0]]`. + +Given the puzzle board `board`, return the least number of moves required so that the state of the board is solved. If it is impossible for the state of the board to be solved, return `-1`. -**Example 1:** +**Example 1:** + +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: board = [[1,2,3],[4,0,5]] +Output: 1 +Explanation: Swap the 0 and the 5 in one move. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Sliding Puzzle -```go +``` +Input: board = [[1,2,3],[5,4,0]] +Output: -1 +Explanation: No number of moves will make the board solved. ``` +**Example 3:** + +![3](./3.jpg) + +``` +Input: board = [[4,1,2],[5,0,3]] +Output: 5 +Explanation: 5 is the smallest number of moves that solves the board. +An example path: +After move 0: [[4,1,2],[5,0,3]] +After move 1: [[4,1,2],[0,5,3]] +After move 2: [[0,1,2],[4,5,3]] +After move 3: [[1,0,2],[4,5,3]] +After move 4: [[1,2,0],[4,5,3]] +After move 5: [[1,2,3],[4,5,0]] +``` ## 结语 diff --git a/leetcode/701-800/0773.Sliding-Puzzle/Solution.go b/leetcode/701-800/0773.Sliding-Puzzle/Solution.go index d115ccf5e..7ff0c11bd 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/Solution.go +++ b/leetcode/701-800/0773.Sliding-Puzzle/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func isOk773(board [2][3]int) bool { + return board[0][0] == 1 && board[0][1] == 2 && board[0][2] == 3 && + board[1][0] == 4 && board[1][1] == 5 +} + +type qItem773 struct { + key [2][3]int + zeroIndex [2]int +} + +var dir773 = [4][2]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, +} + +func Solution(board [][]int) int { + + key := [2][3]int{ + {board[0][0], board[0][1], board[0][2]}, + {board[1][0], board[1][1], board[1][2]}, + } + zeroIndex := [2]int{0, 0} + for i := range 2 { + for j := range 3 { + if board[i][j] == 0 { + zeroIndex = [2]int{i, j} + } + } + } + queue := []qItem773{ + {key, zeroIndex}, + } + used := map[[2][3]int]struct{}{ + key: struct{}{}, + } + steps := 0 + for len(queue) > 0 { + nq := make([]qItem773, 0) + for _, cur := range queue { + if isOk773(cur.key) { + return steps + } + x, y := cur.zeroIndex[0], cur.zeroIndex[1] + for _, d := range dir773 { + nx, ny := x+d[0], y+d[1] + if nx >= 0 && nx <= 1 && ny >= 0 && ny <= 2 { + b := cur.key + b[nx][ny], b[x][y] = b[x][y], b[nx][ny] + if _, ok := used[b]; !ok { + nq = append(nq, qItem773{b, [2]int{nx, ny}}) + used[b] = struct{}{} + } + } + } + } + queue = nq + steps++ + } + return -1 } diff --git a/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go b/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go index 14ff50eb4..2a49619ec 100644 --- a/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go +++ b/leetcode/701-800/0773.Sliding-Puzzle/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2, 3}, {4, 0, 5}}, 1}, + {"TestCase2", [][]int{{1, 2, 3}, {5, 4, 0}}, -1}, + {"TestCase3", [][]int{{4, 1, 2}, {5, 0, 3}}, 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }