Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 06fa05e

Browse files
feat: add solutions to lc problem: No.2850 (doocs#4321)
No.2850.Minimum Moves to Spread Stones Over Grid
1 parent 297b0dc commit 06fa05e

File tree

5 files changed

+591
-0
lines changed

5 files changed

+591
-0
lines changed

‎solution/2800-2899/2850.Minimum Moves to Spread Stones Over Grid/README.md‎

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,208 @@ class Solution {
180180
}
181181
```
182182

183+
#### C++
184+
185+
```cpp
186+
class Solution {
187+
public:
188+
int minimumMoves(vector<vector<int>>& grid) {
189+
queue<string> q;
190+
q.push(f(grid));
191+
unordered_set<string> vis;
192+
vis.insert(f(grid));
193+
vector<int> dirs = {-1, 0, 1, 0, -1};
194+
195+
for (int ans = 0;; ++ans) {
196+
int sz = q.size();
197+
while (sz--) {
198+
string p = q.front();
199+
q.pop();
200+
if (p == "111111111") {
201+
return ans;
202+
}
203+
vector<vector<int>> cur = g(p);
204+
205+
for (int i = 0; i < 3; ++i) {
206+
for (int j = 0; j < 3; ++j) {
207+
if (cur[i][j] > 1) {
208+
for (int d = 0; d < 4; ++d) {
209+
int x = i + dirs[d];
210+
int y = j + dirs[d + 1];
211+
if (x >= 0 && x < 3 && y >= 0 && y < 3 && cur[x][y] < 2) {
212+
vector<vector<int>> nxt = cur;
213+
nxt[i][j]--;
214+
nxt[x][y]++;
215+
string s = f(nxt);
216+
if (!vis.count(s)) {
217+
vis.insert(s);
218+
q.push(s);
219+
}
220+
}
221+
}
222+
}
223+
}
224+
}
225+
}
226+
}
227+
}
228+
229+
private:
230+
string f(const vector<vector<int>>& grid) {
231+
string s;
232+
for (const auto& row : grid) {
233+
for (int x : row) {
234+
s += to_string(x);
235+
}
236+
}
237+
return s;
238+
}
239+
240+
vector<vector<int>> g(const string& s) {
241+
vector<vector<int>> grid(3, vector<int>(3));
242+
for (int i = 0; i < 3; ++i) {
243+
for (int j = 0; j < 3; ++j) {
244+
grid[i][j] = s[i * 3 + j] - '0';
245+
}
246+
}
247+
return grid;
248+
}
249+
};
250+
```
251+
252+
#### Go
253+
254+
```go
255+
type Queue []string
256+
257+
func (q *Queue) Push(s string) {
258+
*q = append(*q, s)
259+
}
260+
261+
func (q *Queue) Pop() string {
262+
s := (*q)[0]
263+
*q = (*q)[1:]
264+
return s
265+
}
266+
267+
func (q *Queue) Empty() bool {
268+
return len(*q) == 0
269+
}
270+
271+
func minimumMoves(grid [][]int) int {
272+
q := Queue{f(grid)}
273+
vis := map[string]bool{f(grid): true}
274+
dirs := []int{-1, 0, 1, 0, -1}
275+
276+
for ans := 0; ; ans++ {
277+
sz := len(q)
278+
for ; sz > 0; sz-- {
279+
p := q.Pop()
280+
if p == "111111111" {
281+
return ans
282+
}
283+
cur := g(p)
284+
285+
for i := 0; i < 3; i++ {
286+
for j := 0; j < 3; j++ {
287+
if cur[i][j] > 1 {
288+
for d := 0; d < 4; d++ {
289+
x, y := i+dirs[d], j+dirs[d+1]
290+
if x >= 0 && x < 3 && y >= 0 && y < 3 && cur[x][y] < 2 {
291+
nxt := make([][]int, 3)
292+
for r := range nxt {
293+
nxt[r] = append([]int(nil), cur[r]...)
294+
}
295+
nxt[i][j]--
296+
nxt[x][y]++
297+
s := f(nxt)
298+
if !vis[s] {
299+
vis[s] = true
300+
q.Push(s)
301+
}
302+
}
303+
}
304+
}
305+
}
306+
}
307+
}
308+
}
309+
}
310+
311+
func f(grid [][]int) string {
312+
var sb strings.Builder
313+
for _, row := range grid {
314+
for _, x := range row {
315+
sb.WriteByte(byte(x) + '0')
316+
}
317+
}
318+
return sb.String()
319+
}
320+
321+
func g(s string) [][]int {
322+
grid := make([][]int, 3)
323+
for i := range grid {
324+
grid[i] = make([]int, 3)
325+
for j := 0; j < 3; j++ {
326+
grid[i][j] = int(s[i*3+j] - '0')
327+
}
328+
}
329+
return grid
330+
}
331+
```
332+
333+
#### TypeScript
334+
335+
```ts
336+
function minimumMoves(grid: number[][]): number {
337+
const q: string[] = [f(grid)];
338+
const vis: Set<string> = new Set([f(grid)]);
339+
const dirs: number[] = [-1, 0, 1, 0, -1];
340+
341+
for (let ans = 0; ; ans++) {
342+
let sz = q.length;
343+
while (sz-- > 0) {
344+
const p = q.shift()!;
345+
if (p === '111111111') {
346+
return ans;
347+
}
348+
const cur = g(p);
349+
350+
for (let i = 0; i < 3; i++) {
351+
for (let j = 0; j < 3; j++) {
352+
if (cur[i][j] > 1) {
353+
for (let d = 0; d < 4; d++) {
354+
const x = i + dirs[d],
355+
y = j + dirs[d + 1];
356+
if (x >= 0 && x < 3 && y >= 0 && y < 3 && cur[x][y] < 2) {
357+
const nxt = cur.map(row => [...row]);
358+
nxt[i][j]--;
359+
nxt[x][y]++;
360+
const s = f(nxt);
361+
if (!vis.has(s)) {
362+
vis.add(s);
363+
q.push(s);
364+
}
365+
}
366+
}
367+
}
368+
}
369+
}
370+
}
371+
}
372+
}
373+
374+
function f(grid: number[][]): string {
375+
return grid.flat().join('');
376+
}
377+
378+
function g(s: string): number[][] {
379+
return Array.from({ length: 3 }, (_, i) =>
380+
Array.from({ length: 3 }, (_, j) => Number(s[i * 3 + j])),
381+
);
382+
}
383+
```
384+
183385
<!-- tabs:end -->
184386

185387
<!-- solution:end -->

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /