@@ -503,6 +503,144 @@ func main() {
503503
504504
505505### Rust
506+ DFS
507+
508+ ``` rust
509+ use std :: io;
510+ use std :: cmp;
511+
512+ // 定义四个方向
513+ const DIRECTIONS : [(i32 , i32 ); 4 ] = [(0 , 1 ), (1 , 0 ), (- 1 , 0 ), (0 , - 1 )];
514+
515+ fn dfs (grid : & Vec <Vec <i32 >>, visited : & mut Vec <Vec <bool >>, x : usize , y : usize , count : & mut i32 ) {
516+ if visited [x ][y ] || grid [x ][y ] == 0 {
517+ return ; // 终止条件:已访问或者遇到海水
518+ }
519+ visited [x ][y ] = true ; // 标记已访问
520+ * count += 1 ;
521+
522+ for & (dx , dy ) in DIRECTIONS . iter () {
523+ let new_x = x as i32 + dx ;
524+ let new_y = y as i32 + dy ;
525+
526+ // 检查边界条件
527+ if new_x >= 0 && new_x < grid . len () as i32 && new_y >= 0 && new_y < grid [0 ]. len () as i32 {
528+ dfs (grid , visited , new_x as usize , new_y as usize , count );
529+ }
530+ }
531+ }
532+
533+ fn main () {
534+ let mut input = String :: new ();
535+
536+ // 读取 n 和 m
537+ io :: stdin (). read_line (& mut input );
538+ let dims : Vec <usize > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
539+ let (n , m ) = (dims [0 ], dims [1 ]);
540+
541+ // 读取 grid
542+ let mut grid = vec! [];
543+ for _ in 0 .. n {
544+ input . clear ();
545+ io :: stdin (). read_line (& mut input );
546+ let row : Vec <i32 > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
547+ grid . push (row );
548+ }
549+
550+ // 初始化访问记录
551+ let mut visited = vec! [vec! [false ; m ]; n ];
552+ let mut result = 0 ;
553+
554+ // 遍历所有格子
555+ for i in 0 .. n {
556+ for j in 0 .. m {
557+ if ! visited [i ][j ] && grid [i ][j ] == 1 {
558+ let mut count = 0 ;
559+ dfs (& grid , & mut visited , i , j , & mut count );
560+ result = cmp :: max (result , count );
561+ }
562+ }
563+ }
564+
565+ // 输出结果
566+ println! (" {}" , result );
567+ }
568+
569+ ```
570+ BFS
571+ ``` rust
572+ use std :: io;
573+ use std :: collections :: VecDeque ;
574+
575+ // 定义四个方向
576+ const DIRECTIONS : [(i32 , i32 ); 4 ] = [(0 , 1 ), (1 , 0 ), (- 1 , 0 ), (0 , - 1 )];
577+
578+ fn bfs (grid : & Vec <Vec <i32 >>, visited : & mut Vec <Vec <bool >>, x : usize , y : usize ) -> i32 {
579+ let mut count = 0 ;
580+ let mut queue = VecDeque :: new ();
581+ queue . push_back ((x , y ));
582+ visited [x ][y ] = true ; // 标记已访问
583+
584+ while let Some ((cur_x , cur_y )) = queue . pop_front () {
585+ count += 1 ; // 增加计数
586+
587+ for & (dx , dy ) in DIRECTIONS . iter () {
588+ let new_x = cur_x as i32 + dx ;
589+ let new_y = cur_y as i32 + dy ;
590+
591+ // 检查边界条件
592+ if new_x >= 0 && new_x < grid . len () as i32 && new_y >= 0 && new_y < grid [0 ]. len () as i32 {
593+ let new_x_usize = new_x as usize ;
594+ let new_y_usize = new_y as usize ;
595+
596+ // 如果未访问且是陆地,加入队列
597+ if ! visited [new_x_usize ][new_y_usize ] && grid [new_x_usize ][new_y_usize ] == 1 {
598+ visited [new_x_usize ][new_y_usize ] = true ; // 标记已访问
599+ queue . push_back ((new_x_usize , new_y_usize ));
600+ }
601+ }
602+ }
603+ }
604+
605+ count
606+ }
607+
608+ fn main () {
609+ let mut input = String :: new ();
610+
611+ // 读取 n 和 m
612+ io :: stdin (). read_line (& mut input ). expect (" Failed to read line" );
613+ let dims : Vec <usize > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
614+ let (n , m ) = (dims [0 ], dims [1 ]);
615+
616+ // 读取 grid
617+ let mut grid = vec! [];
618+ for _ in 0 .. n {
619+ input . clear ();
620+ io :: stdin (). read_line (& mut input ). expect (" Failed to read line" );
621+ let row : Vec <i32 > = input . trim (). split_whitespace (). map (| s | s . parse (). unwrap ()). collect ();
622+ grid . push (row );
623+ }
624+
625+ // 初始化访问记录
626+ let mut visited = vec! [vec! [false ; m ]; n ];
627+ let mut result = 0 ;
628+
629+ // 遍历所有格子
630+ for i in 0 .. n {
631+ for j in 0 .. m {
632+ if ! visited [i ][j ] && grid [i ][j ] == 1 {
633+ let count = bfs (& grid , & mut visited , i , j );
634+ result = result . max (count );
635+ }
636+ }
637+ }
638+
639+ // 输出结果
640+ println! (" {}" , result );
641+ }
642+
643+ ```
506644
507645### Javascript
508646
0 commit comments