@@ -494,6 +494,132 @@ function maximumSafenessFactor(grid: number[][]): number {
494
494
}
495
495
```
496
496
497
+ ``` ts
498
+ function maximumSafenessFactor(grid : number [][]): number {
499
+ const n = grid .length ;
500
+ const g = Array .from ({ length: n }, () => new Array (n ).fill (- 1 ));
501
+ const vis = Array .from ({ length: n }, () => new Array (n ).fill (false ));
502
+ let q: [number , number ][] = [];
503
+ for (let i = 0 ; i < n ; i ++ ) {
504
+ for (let j = 0 ; j < n ; j ++ ) {
505
+ if (grid [i ][j ] === 1 ) {
506
+ q .push ([i , j ]);
507
+ }
508
+ }
509
+ }
510
+ let level = 0 ;
511
+ while (q .length ) {
512
+ const t: [number , number ][] = [];
513
+ for (const [x, y] of q ) {
514
+ if (x < 0 || y < 0 || x === n || y === n || g [x ][y ] !== - 1 ) {
515
+ continue ;
516
+ }
517
+ g [x ][y ] = level ;
518
+ t .push ([x + 1 , y ]);
519
+ t .push ([x - 1 , y ]);
520
+ t .push ([x , y + 1 ]);
521
+ t .push ([x , y - 1 ]);
522
+ }
523
+ q = t ;
524
+ level ++ ;
525
+ }
526
+ const dfs = (i : number , j : number , v : number ) => {
527
+ if (i < 0 || j < 0 || i === n || j === n || vis [i ][j ] || g [i ][j ] <= v ) {
528
+ return false ;
529
+ }
530
+ vis [i ][j ] = true ;
531
+ return (
532
+ (i === n - 1 && j === n - 1 ) ||
533
+ dfs (i + 1 , j , v ) ||
534
+ dfs (i , j + 1 , v ) ||
535
+ dfs (i - 1 , j , v ) ||
536
+ dfs (i , j - 1 , v )
537
+ );
538
+ };
539
+
540
+ let left = 0 ;
541
+ let right = level ;
542
+ while (left < right ) {
543
+ vis .forEach (v => v .fill (false ));
544
+ const mid = (left + right ) >>> 1 ;
545
+ if (dfs (0 , 0 , mid )) {
546
+ left = mid + 1 ;
547
+ } else {
548
+ right = mid ;
549
+ }
550
+ }
551
+ return right ;
552
+ }
553
+ ```
554
+
555
+ ### ** Rust**
556
+
557
+ ``` rust
558
+ use std :: collections :: VecDeque ;
559
+ impl Solution {
560
+ fn dfs (i : usize , j : usize , v : i32 , g : & Vec <Vec <i32 >>, vis : & mut Vec <Vec <bool >>) -> bool {
561
+ if vis [i ][j ] || g [i ][j ] <= v {
562
+ return false ;
563
+ }
564
+ vis [i ][j ] = true ;
565
+ let n = g . len ();
566
+ i == n - 1 && j == n - 1
567
+ || i != 0 && Self :: dfs (i - 1 , j , v , g , vis )
568
+ || i != n - 1 && Self :: dfs (i + 1 , j , v , g , vis )
569
+ || j != 0 && Self :: dfs (i , j - 1 , v , g , vis )
570
+ || j != n - 1 && Self :: dfs (i , j + 1 , v , g , vis )
571
+ }
572
+
573
+ pub fn maximum_safeness_factor (grid : Vec <Vec <i32 >>) -> i32 {
574
+ let n = grid . len ();
575
+ let mut g = vec! [vec! [- 1 ; n ]; n ];
576
+ let mut q = VecDeque :: new ();
577
+ for i in 0 .. n {
578
+ for j in 0 .. n {
579
+ if grid [i ][j ] == 1 {
580
+ q . push_back ((i , j ));
581
+ }
582
+ }
583
+ }
584
+ let mut level = 0 ;
585
+ while ! q . is_empty () {
586
+ let m = q . len ();
587
+ for _ in 0 .. m {
588
+ let (i , j ) = q . pop_front (). unwrap ();
589
+ if g [i ][j ] != - 1 {
590
+ continue ;
591
+ }
592
+ g [i ][j ] = level ;
593
+ if i != n - 1 {
594
+ q . push_back ((i + 1 , j ));
595
+ }
596
+ if i != 0 {
597
+ q . push_back ((i - 1 , j ));
598
+ }
599
+ if j != n - 1 {
600
+ q . push_back ((i , j + 1 ));
601
+ }
602
+ if j != 0 {
603
+ q . push_back ((i , j - 1 ));
604
+ }
605
+ }
606
+ level += 1 ;
607
+ }
608
+ let mut left = 0 ;
609
+ let mut right = level ;
610
+ while left < right {
611
+ let mid = (left + right ) >> 1 ;
612
+ if Self :: dfs (0 , 0 , mid , & g , & mut vec! [vec! [false ; n ]; n ]) {
613
+ left = mid + 1 ;
614
+ } else {
615
+ right = mid ;
616
+ }
617
+ }
618
+ right
619
+ }
620
+ }
621
+ ```
622
+
497
623
### ** ...**
498
624
499
625
```
0 commit comments