@@ -389,6 +389,144 @@ func main() {
389389
390390
391391### Rust
392+ DFS
393+
394+ ``` rust
395+ use std :: io;
396+ use std :: cmp;
397+
398+ // 定义四个方向
399+ const DIRECTIONS : [(i32 , i32 ); 4 ] = [(0 , 1 ), (1 , 0 ), (- 1 , 0 ), (0 , - 1 )];
400+
401+ fn dfs (grid : & Vec <Vec <i32 >>, visited : & mut Vec <Vec <bool >>, x : usize , y : usize , count : & mut i32 ) {
402+ if visited [x ][y ] || grid [x ][y ] == 0 {
403+ return ; // 终止条件:已访问或者遇到海水
404+ }
405+ visited [x ][y ] = true ; // 标记已访问
406+ * count += 1 ;
407+
408+ for & (dx , dy ) in DIRECTIONS . iter () {
409+ let new_x = x as i32 + dx ;
410+ let new_y = y as i32 + dy ;
411+
412+ // 检查边界条件
413+ if new_x >= 0 && new_x < grid . len () as i32 && new_y >= 0 && new_y < grid [0 ]. len () as i32 {
414+ dfs (grid , visited , new_x as usize , new_y as usize , count );
415+ }
416+ }
417+ }
418+
419+ fn main () {
420+ let mut input = String :: new ();
421+
422+ // 读取 n 和 m
423+ io :: stdin (). read_line (& mut input );
424+ let dims : Vec <usize > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
425+ let (n , m ) = (dims [0 ], dims [1 ]);
426+
427+ // 读取 grid
428+ let mut grid = vec! [];
429+ for _ in 0 .. n {
430+ input . clear ();
431+ io :: stdin (). read_line (& mut input );
432+ let row : Vec <i32 > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
433+ grid . push (row );
434+ }
435+
436+ // 初始化访问记录
437+ let mut visited = vec! [vec! [false ; m ]; n ];
438+ let mut result = 0 ;
439+
440+ // 遍历所有格子
441+ for i in 0 .. n {
442+ for j in 0 .. m {
443+ if ! visited [i ][j ] && grid [i ][j ] == 1 {
444+ let mut count = 0 ;
445+ dfs (& grid , & mut visited , i , j , & mut count );
446+ result = cmp :: max (result , count );
447+ }
448+ }
449+ }
450+
451+ // 输出结果
452+ println! (" {}" , result );
453+ }
454+
455+ ```
456+ BFS
457+ ``` rust
458+ use std :: io;
459+ use std :: collections :: VecDeque ;
460+
461+ // 定义四个方向
462+ const DIRECTIONS : [(i32 , i32 ); 4 ] = [(0 , 1 ), (1 , 0 ), (- 1 , 0 ), (0 , - 1 )];
463+
464+ fn bfs (grid : & Vec <Vec <i32 >>, visited : & mut Vec <Vec <bool >>, x : usize , y : usize ) -> i32 {
465+ let mut count = 0 ;
466+ let mut queue = VecDeque :: new ();
467+ queue . push_back ((x , y ));
468+ visited [x ][y ] = true ; // 标记已访问
469+
470+ while let Some ((cur_x , cur_y )) = queue . pop_front () {
471+ count += 1 ; // 增加计数
472+
473+ for & (dx , dy ) in DIRECTIONS . iter () {
474+ let new_x = cur_x as i32 + dx ;
475+ let new_y = cur_y as i32 + dy ;
476+
477+ // 检查边界条件
478+ if new_x >= 0 && new_x < grid . len () as i32 && new_y >= 0 && new_y < grid [0 ]. len () as i32 {
479+ let new_x_usize = new_x as usize ;
480+ let new_y_usize = new_y as usize ;
481+
482+ // 如果未访问且是陆地,加入队列
483+ if ! visited [new_x_usize ][new_y_usize ] && grid [new_x_usize ][new_y_usize ] == 1 {
484+ visited [new_x_usize ][new_y_usize ] = true ; // 标记已访问
485+ queue . push_back ((new_x_usize , new_y_usize ));
486+ }
487+ }
488+ }
489+ }
490+
491+ count
492+ }
493+
494+ fn main () {
495+ let mut input = String :: new ();
496+
497+ // 读取 n 和 m
498+ io :: stdin (). read_line (& mut input ). expect (" Failed to read line" );
499+ let dims : Vec <usize > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
500+ let (n , m ) = (dims [0 ], dims [1 ]);
501+
502+ // 读取 grid
503+ let mut grid = vec! [];
504+ for _ in 0 .. n {
505+ input . clear ();
506+ io :: stdin (). read_line (& mut input ). expect (" Failed to read line" );
507+ let row : Vec <i32 > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
508+ grid . push (row );
509+ }
510+
511+ // 初始化访问记录
512+ let mut visited = vec! [vec! [false ; m ]; n ];
513+ let mut result = 0 ;
514+
515+ // 遍历所有格子
516+ for i in 0 .. n {
517+ for j in 0 .. m {
518+ if ! visited [i ][j ] && grid [i ][j ] == 1 {
519+ let count = bfs (& grid , & mut visited , i , j );
520+ result = result . max (count );
521+ }
522+ }
523+ }
524+
525+ // 输出结果
526+ println! (" {}" , result );
527+ }
528+
529+ ```
392530
393531### Javascript
394532
0 commit comments