Skip to main content

DFS Application | Graph Problems | Max Area of Island

Introduction:
In this tutorial, we are going to implement DFS  to solve another important problem. this is a good question for interview point of view.

Problem Statement: Leetcode

Input:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,1,1,0,1,0,0,0,0,0,0,0,0],
 [0,1,0,0,1,1,0,0,1,0,1,0,0],
 [0,1,0,0,1,1,0,0,1,1,1,0,0],
 [0,0,0,0,0,0,0,0,0,0,1,0,0],
 [0,0,0,0,0,0,0,1,1,1,0,0,0],
 [0,0,0,0,0,0,0,1,1,0,0,0,0]]

Output: 6

Solution:
So basically we are going to use DFS to solve this problem, and we will use a 2D
vector to track the already visited element.
let's see the code:

Full Code:

int helper(vector<vector<int>>& grid,int x, int y, vector<vector<int>>&visited){
if(x<0 || x>=grid.size() || y<0 || y>=grid[x].size())
return 0;
if(grid[x][y]==0){
return 0;
}
if(visited[x][y]==1){
return 0;
}
visited[x][y]=1;
// cout<<x<<" "<<y<<endl;
int l=helper(grid,x-1,y,visited);
int r=helper(grid,x+1,y,visited);
int t=helper(grid,x,y-1,visited);
int b=helper(grid,x,y+1,visited);
return 1+l+r+t+b;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int maxarea=0;
vector<vector<int>>visited(grid.size(),vector<int>(grid[0].size(),0));
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[i].size();j++){
if(grid[i][j]==1 && visited[i][j]==0){
cout<<i<<" "<<j<<endl;
int area=helper(grid,i,j,visited);
if(area>maxarea){
maxarea=area;
}
}
else{
continue;
}
}
}
return maxarea;
}



Comments

Popular posts from this blog

Disjiont Set Union-Find Data Structure | Code In C++

 Introduction:  In this tutorial we are going to write full program of disjoint set union find advance data structure in c++.  Problem Description: Disjoint Set Union (DSU) is an advance data structure, which basically uses in graph algorithms to find cycles. Codes:  Method1: Brute Force #include<bits/stdc++.h> using namespace std; int find(int f,vector<int>&dsuf){     if(dsuf[f]==-1)         return f;     return find(dsuf[f],dsuf); } void union_op(int from, int to, vector<int>& dsuf){     dsuf[from]=to; } bool isCycle(vector<pair<int,int> >&edge_list, vector<int>&dsuf){     for(int i=0;i<edge_list.size();i++){         int parent1=find(edge_list[i].first,dsuf);         int parent2=find(edge_list[i].second,dsuf);         if(parent1==pare...

Construct Binary Tree from preorder and inorder | Data Structure

Introduction: In this tutorial we are going to see how we can construct the binary tree from given preorder and inorder. Prerequisites: you should know about binary tree traversal and on paper you can draw binary tree from given preorder and inorder traversal. Inorder:left->root->right; Preorder:root->left->right; Problem Statement: we have given two arrays. one for preorder and another for inorder. by using these two array we have to built a binary tree. eg: preorder = [3,9,20,15,7] inorder = [9,3,15,20,7] solution: Solution: We will follow recursive approach to solve this question.let's discuss how we can solve it. Trick: In the given preorder the very first element will be the root of the tree. then we will find root element in inorder also. and we know in inorder traversal we have left part then root and then right part of the tree. by using preorder we can get the root of the main tree and by using inorder and root we can get the left part and right part of the...