JavaScript-编程题dfs的运用

JavaScript-编程题dfs的运用,第1张

题目:给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右),计算岛屿个数。

如:
输入:
grid = [
[1 1 0 0 0]
[0 1 0 1 1]
[0 0 0 1 1]
[0 0 0 0 0]
[0 0 1 1 1]
]
输出:3
原因:有三个岛屿,分别在左上角、中间右边、右下角

思路:利用暴力解法,循环每一个位置,在每一个位置时判断该位置是否为‘1’,若为‘1’,岛屿数量加一,进入dfs搜索,在dfs搜索中,将当前陆地‘1’变为0,并且判断旁边的位置是否为‘1’,若为‘1’,继续递归遍历。

代码:

	function solve( grid ) {
	    // write code here
	    let col = grid.length
	    let row = grid[0].length
	    let result = 0
	    for (let i=0; i < col; i++) {
	        for (let j=0; j < row; j++) {
	            if (grid[i][j] == 1) {
	                result++
	                dfs(grid, i, j)
	            }
	        }
	    }
	    return result
	}
	function dfs(grid, i, j) {
	    grid[i][j] = 0
	    if (i-1 >= 0 && grid[i-1][j] == 1) {
	        dfs(grid, i-1, j)
	    }
	    if (j-1 >=0 && grid[i][j-1] == 1) {
	        dfs(grid, i, j-1)
	    }
	    if (i+1 < grid.length && grid[i+1][j] ==1) {
	        dfs(grid, i+1, j)
	    }
	    if (j+1 < grid[0].length && grid[i][j+1] == 1) {
	        dfs(grid, i, j+1)
	    }
	}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1321374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存