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
|
impl Solution {
pub fn color_border(grid: Vec<Vec<i32>>, row: i32, col: i32, color: i32) -> Vec<Vec<i32>> {
let m = grid.len();
let n = grid[0].len();
let orig = grid[row as usize][col as usize];
let mut vis = vec![vec![false; n]; m];
let mut borders = vec![];
fn dfs(x: usize, y: usize, m: usize, n: usize, orig: i32, grid: &Vec<Vec<i32>>, vis: &mut Vec<Vec<bool>>, borders: &mut Vec<(usize, usize)>) {
vis[x][y] = true;
let dirs = [(0,1),(1,0),(0,-1),(-1,0)];
let mut is_border = false;
for (dx, dy) in dirs.iter() {
let nx = x as i32 + dx;
let ny = y as i32 + dy;
if nx < 0 || nx >= m as i32 || ny < 0 || ny >= n as i32 || grid[nx as usize][ny as usize] != orig {
is_border = true;
} else if !vis[nx as usize][ny as usize] {
dfs(nx as usize, ny as usize, m, n, orig, grid, vis, borders);
}
}
if is_border {
borders.push((x, y));
}
}
dfs(row as usize, col as usize, m, n, orig, &grid, &mut vis, &mut borders);
let mut grid = grid;
for (x, y) in borders {
grid[x][y] = color;
}
grid
}
}
|