DFS

DFS 深度优先遍历用于解决可达性问题

在程序实现 DFS 时需要考虑以下问题:

  • 栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。
  • 标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。

岛屿的最大面积

var m=0, n=0; 
			 var direction = [[0, 1], [0, -1], [1,0], [-1, 0]]
			function dfs(grid,r,c){
				  if (r < 0 || r >= m || c < 0 || c >= n || grid[r][c] == 0) {        
					  return 0;     
					  }     
				  grid[r][c] = 0;     //置为0代表访问过
				  let area = 1;     
				  for (let d=0;d<direction.length;d++) {         
					  area += dfs(grid, r + direction[d][0], c + direction[d][1]);     
					  }     
					  return area; 
					  }
			
			var maxAreaOfIsland = function(grid) {
				if (grid == null || grid.length == 0) {
					 return 0;     
					 }     
				 m = grid.length;     
				 n = grid[0].length;     
				 let maxArea = 0;     
				 for (let i = 0; i < m; i++) {         
					 for (let j = 0; j < n; j++) {             
						maxArea = Math.max(maxArea, dfs(grid, i, j));         
					 } 
				}     
				return maxArea; 
			};

547朋友圈

var n=0
			function dfs( M,  i, hasVisited) {     
				hasVisited[i] = true;     
				for (var k = 0; k < n; k++) {         
					if (M[i][k] == 1 && !hasVisited[k]) 
					{             
						dfs(M, k, hasVisited);         
						}     
					} 
				} 

			var findCircleNum = function(M) {
				 n = M.length;     
				 let circleNum = 0;    
				 let hasVisited = new Array(n).fill(false);     
				 for (var i = 0; i < n; i++) {         
					 if (!hasVisited[i]) {             
						 dfs(M, i, hasVisited);             
						 circleNum++;         
						 }     
						 }     
					return circleNum; 
			};
posted @ 2020-01-12 21:06  终相守  阅读(66)  评论(0)    收藏  举报