@@ -480,7 +480,84 @@ const bfs = (graph, visited, x, y) => {
480480})()
481481```
482482
483+ ``` javascript
484+
485+ // 深搜版
486+
487+ const r1 = require (' readline' ).createInterface ({ input: process .stdin });
488+ // 创建readline接口
489+ let iter = r1[Symbol .asyncIterator ]();
490+ // 创建异步迭代器
491+ const readline = async () => (await iter .next ()).value ;
492+
493+ let graph // 地图
494+ let N , M // 地图大小
495+ let visited // 访问过的节点
496+ let result = 0 // 最大岛屿面积
497+ let count = 0 // 岛屿内节点数
498+ const dir = [[0 , 1 ], [1 , 0 ], [0 , - 1 ], [- 1 , 0 ]] // 方向
499+
500+ // 读取输入,初始化地图
501+ const initGraph = async () => {
502+ let line = await readline ();
503+ [N , M ] = line .split (' ' ).map (Number );
504+ graph = new Array (N ).fill (0 ).map (() => new Array (M ).fill (0 ))
505+ visited = new Array (N ).fill (false ).map (() => new Array (M ).fill (false ))
506+
507+ for (let i = 0 ; i < N ; i++ ) {
508+ line = await readline ()
509+ line = line .split (' ' ).map (Number )
510+ for (let j = 0 ; j < M ; j++ ) {
511+ graph[i][j] = line[j]
512+ }
513+ }
514+ }
483515
516+ /**
517+ * @description : 从(x, y)开始深度优先遍历
518+ * @param {*} graph 地图
519+ * @param {*} visited 访问过的节点
520+ * @param {*} x 开始搜索节点的下标
521+ * @param {*} y 开始搜索节点的下标
522+ * @return {*}
523+ */
524+ const dfs = (graph , visited , x , y ) => {
525+ for (let i = 0 ; i < 4 ; i++ ) {
526+ let nextx = x + dir[i][0 ]
527+ let nexty = y + dir[i][1 ]
528+ if (nextx < 0 || nextx >= N || nexty < 0 || nexty >= M ) continue
529+ if (! visited[nextx][nexty] && graph[nextx][nexty] === 1 ){
530+ count++
531+ visited[nextx][nexty] = true
532+ dfs (graph, visited, nextx, nexty)
533+ }
534+ }
535+ }
536+
537+ (async function () {
538+
539+ // 读取输入,初始化地图
540+ await initGraph ()
541+
542+ // 统计最大岛屿面积
543+ for (let i = 0 ; i < N ; i++ ) {
544+ for (let j = 0 ; j < M ; j++ ) {
545+ if (! visited[i][j] && graph[i][j] === 1 ) { // 遇到没有访问过的陆地
546+ // 重新计算面积
547+ count = 1
548+ visited[i][j] = true
549+
550+ // 深度优先遍历,统计岛屿内节点数,并将岛屿标记为已访问
551+ dfs (graph, visited, i, j)
552+
553+ // 更新最大岛屿面积
554+ result = Math .max (result, count)
555+ }
556+ }
557+ }
558+ console .log (result);
559+ })()
560+ ```
484561
485562### TypeScript
486563
0 commit comments