Skip to content

Commit

Permalink
Added Number Of islands Solution
Browse files Browse the repository at this point in the history
added leetcode problem 200 number of island solution in c++.
solved issue keshavsingh4522#4483
  • Loading branch information
sajithsojan committed Sep 26, 2023
1 parent 323585d commit a065a10
Show file tree
Hide file tree
Showing 3 changed files with 168 additions and 76 deletions.
60 changes: 32 additions & 28 deletions C/Linear_Search.c
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
#include<stdio.h>
#include<conio.h>
void main()
#include <stdio.h>

int main()
{
clrscr();
int i,n,a[100],search;
printf("Enter number of elements : ");
scanf("%d",&n);
printf("\nEnter %d elements : \n",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("\nEnter element to be searched : ");
scanf("%d",&search);
for(i=0;i<n;i++)
{
if(a[i]==search)
{
printf("\nFound at %d .",m+1);
break;
}
}
if(i==n)
{
printf("\nElement not found.");
}
getch();
}
int arr[50];
int n, number, ind = -1;
printf("Enter the number of elements : ");
scanf("%d", &n);
printf("Enter Array Elements : ");
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
printf("\nEnter the Number to be searched : ");
scanf("%d", &number);
for (int i = 0; i < n; i++)
{
if (number == arr[i])
{
ind = i;
break;
}
}
if (ind != -1)
{
printf("\nElement %d found at %d position", number, ind + 1);
}
else
{
printf("Element not found :)\n");
}
return 0;
}
143 changes: 95 additions & 48 deletions CPP/BFS.cpp
Original file line number Diff line number Diff line change
@@ -1,48 +1,95 @@
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
#pragma GCC optimize("unroll-loops")
const unsigned int M = 1000000007;
using namespace std;
// Check
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> T_set; // PBDS_set
typedef tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update> T_multiset; // PBDS_multiset

void solve()
{
int n ,m,u,v;
cin>>n>>m;
vector<list<int>> adj(n+1);
vector<bool> vis(n+1,false);
for(int i = 0; i < n ; i++ ){
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
queue<int> temp;
temp.push(1);
vis[1] = true;
while(!temp.empty()){
int curr = temp.front();
cout<<curr<<" ";
temp.pop();
for(int elem : adj[curr]){
if(!vis[elem]){
temp.push(elem);
vis[elem] = true;
}
}
}

}
int main()
{
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
solve();
return 0;
}
// Program to print BFS traversal from a given
// source vertex. BFS(int s) traverses vertices
// reachable from s.
#include<iostream>
#include <list>

using namespace std;

// This class represents a directed graph using
// adjacency list representation
class Graph
{
int V; // No. of vertices

// Pointer to an array containing adjacency
// lists
list<int> *adj;
public:
Graph(int V); // Constructor

// function to add an edge to graph
void addEdge(int v, int w);

// prints BFS traversal from a given source s
void BFS(int s);
};

Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}

void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}

void Graph::BFS(int s)
{
// Mark all the vertices as not visited
bool *visited = new bool[V];
for(int i = 0; i < V; i++)
visited[i] = false;

// Create a queue for BFS
list<int> queue;

// Mark the current node as visited and enqueue it
visited[s] = true;
queue.push_back(s);

// 'i' will be used to get all adjacent
// vertices of a vertex
list<int>::iterator i;

while(!queue.empty())
{
// Dequeue a vertex from queue and print it
s = queue.front();
cout << s << " ";
queue.pop_front();

// Get all adjacent vertices of the dequeued
// vertex s. If a adjacent has not been visited,
// then mark it visited and enqueue it
for (i = adj[s].begin(); i != adj[s].end(); ++i)
{
if (!visited[*i])
{
visited[*i] = true;
queue.push_back(*i);
}
}
}
}

// Driver program to test methods of graph class
int main()
{
// Create a graph given in the above diagram
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);

cout << "Following is Breadth First Traversal "
<< "(starting from vertex 2) \n";
g.BFS(2);

return 0;
}
41 changes: 41 additions & 0 deletions DSA/Graphs/number_of_islands
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if (grid.empty() || grid[0].empty()) {
return 0;
}

int numIslands = 0;
int numRows = grid.size();
int numCols = grid[0].size();

for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
if (grid[i][j] == '1') {
numIslands++;
dfs(grid, i, j);
}
}
}

return numIslands;
}

private:
void dfs(vector<vector<char>>& grid, int row, int col) {
int numRows = grid.size();
int numCols = grid[0].size();

if (row < 0 || col < 0 || row >= numRows || col >= numCols || grid[row][col] == '0') {
return;
}

grid[row][col] = '0'; // Mark the current cell as visited

// Explore adjacent cells in all four directions
dfs(grid, row + 1, col);
dfs(grid, row - 1, col);
dfs(grid, row, col + 1);
dfs(grid, row, col - 1);
}
};

0 comments on commit a065a10

Please sign in to comment.