Assignment Circular Linked List

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 62

Assignment

Circular Linked List


#include <stdio.h>

#include <stdlib.h>

struct Node

int data;

struct Node *next,*prev;

};

#define node struct Node

node *root;

void insert(int v)

node* nn=(node*)malloc(sizeof(Node));

nn->data=v;

nn->next=NULL;

nn->prev=NULL;

if(root==NULL)

root=nn;

return;

if(root->data>=v)

nn->next=root;

nn->next->prev=nn;

root=nn;

return;
}

node* cur=root;

while(cur->next!=NULL && cur->next->data<v)

cur=cur->next;

nn->next=cur->next;

cur->next=nn;

nn->prev=cur;

void print()

if(root==NULL)

puts("List is empty");

return;

printf("List :");

Node *cur;

cur=root;

while(cur!=NULL)

printf(" %d",cur->data);

cur=cur->next;

puts("");

int main()

root=NULL;
int n,i,k;

scanf("%d",&n);

while(n--)

scanf("%d",&k);

insert(k);

print();

Doubly Linked List


#include<stdio.h>

#include<stdlib.h>

struct Node

int data;

struct Node *next;

struct Node *prev;

};

typedef struct Node node;

node *root,*tail;

void insertfront(int data)

node *nn=(node*)malloc(sizeof(node));

nn->data=data;

nn->next=nn;

nn->prev=nn;
if(root==NULL)

root=nn;

tail=nn;

else

nn->next=root;

nn->prev=tail;

root->prev=nn;

tail->next=nn;

root=nn;

void insertback(int data)

node *nn=(node*)malloc(sizeof(node));

nn->data=data;

nn->next=nn;

nn->prev=nn;

if(root==NULL)

root=nn;

tail=nn;

else

{
tail->next=nn;

nn->next=root;

nn->prev=tail;

tail=nn;

root->prev=tail;

void deletefront()

if(root==NULL)

return;

node *temp=root;

tail->next=root->next;

root=root->next;

root->prev=tail;

free(temp);

void deleteback()

if(root==NULL)

return;

node *temp=root;

node *cur=root;

while(cur->next!=root)
{

temp=cur;

cur=cur->next;

temp->next=root;

tail=temp;

root->prev=tail;

free(cur);

void print()

if(root==NULL)

return;

node *cur=root;

printf("List : ");

do

printf(" %d",cur->data);

cur = cur->next;

}while(cur != root);

int main()

root=NULL;

tail=NULL;

int n,i,k;

scanf("%d",&n);

while(n--)
{

scanf("%d",&k);

insertback(k);

print();

Tower of hanoi recursive

#include <stdio.h>

void hanoi(int n,char a,char b,char c)

if (n==1)

printf("Move disk no. 1 from rod %c to rod %c\n",a,c);

return;

hanoi(n-1,a,c,b);

printf("Move disk no. %d from rod %c to rod %c\n",n,a,c);

hanoi(n-1,b,a,c);

int main()

int n;

printf("Enter number of disks : ");

scanf("%d",&n);

hanoi(n,'A','B','C');

}
Tower of hanoi non-recursive

#include <iostream>

using namespace std;

struct Node

int n;

char a,b,c;

struct Node* next;

};

struct Node* top;

void push(int n,char a,char b,char c)

struct Node* temp=(struct Node*)malloc(sizeof(struct Node));

temp->a=a;

temp->b=b;

temp->c=c;

temp->n=n;

temp->next=top;

top=temp;

void pop()

struct Node* temp=(struct Node*)malloc(sizeof(struct Node));

if(top==NULL)

return;

temp=top;

top=top->next;

free(temp);
}

int empty()

return(top==NULL)?1:0;

struct Node* Top()

return top;

int main()

int n;

scanf("%d",&n);

push(n,'A','B','C');

while(!empty())

struct Node* temp=Top();

n=temp->n;

char a=temp->a;

char b=temp->b;

char c=temp->c;

pop();

if(n==1)

printf("Move top disk from %c to %c\n",a,c);

else

push(n-1,b,a,c);

push(1,a,b,c);

push(n-1,a,c,b);
}

Infix to Postfix Notation


#include <bits/stdc++.h>

using namespace std;

char a[100],s[100],c;

int temp;

struct Node

char data;

int data2;

struct Node* next;

};

struct Node* top=NULL;

void push(int choice)

struct Node *newNode;

newNode=(struct Node*)malloc(sizeof(struct Node));

if(choice==1)

newNode->data=c;

else if(choice==2)

newNode->data2=temp;

if(top==NULL)

newNode->next=NULL;

else

newNode->next=top;

top=newNode;

}
void pop()

if(top==NULL)

return;

else

struct Node *temp=top;

top=temp->next;

free(temp);

char Top(int choice)

if(choice==1)

return top->data;

return top->data2;

int isEmpty()

return top==NULL;

int isNum(char ch)

return ch>='0' && ch<='9';

int prec(char ch)

int n=-1;

if(ch=='^')
n=3;

else if(ch=='*' || ch=='/')

n=2;

else if(ch=='+' || ch=='-')

n=1;

return n;

void getpostfix()

int i,j=0;

for(i=0;i<strlen(a);i++)

if(isNum(a[i]))

while(isNum(a[i]) && i<strlen(a))

s[j++]=a[i++];

i--;

s[j++]=' ';

else if(a[i]=='(')

c='(';

push(1);

else if(a[i]==')')

while(!isEmpty() && Top(1)!='(')

s[j++]=Top(1);
pop();

if(Top(1)=='(')

pop();

else

while(!isEmpty() && prec(a[i])<=prec(Top(1)))

s[j++]=Top(1);

pop();

c=a[i];

push(1);

while(!isEmpty())

s[j++]=Top(1);

pop();

s[j]='\0';

printf("Postfix : %s\n",s);

void evaluate()

int i,j;

for(i=0;i<strlen(s);i++)

{
if(isNum(s[i]))

j=0;

char b[100];

while(isNum(s[i]) && i<strlen(s))

b[j++]=s[i++];

i--;

if(s[i]!=' ')

i++;

b[j]='\0';

temp=atoi(b);

push(2);

else if(s[i]==' ')

i++;

else

int x=Top(2);

pop();

int y=Top(2);

pop();

switch(s[i])

case '+':

temp=y+x;

push(2);

break;

case '-':

temp=y-x;
push(2);

break;

case '*':

temp=y*x;

push(2);

break;

case '/':

temp=y/x;

push(2);

break;

case '^':

temp=pow(y,x);

push(2);

break;

int main()

gets(a);

getpostfix();

top=NULL;

evaluate();

printf("Result : %d",Top(2));

}
BFS

#include <bits/stdc++.h>

#define N 10000

using namespace std;

int n,m,grid[N][N];

int k,vis[N],ara[N];

struct Node

int data;

struct Node* next;

};

struct Node* front=NULL;

struct Node* rear=NULL;

void push(int x)

struct Node* temp=(struct Node*)malloc(sizeof(struct Node));

temp->data=x;

temp->next=NULL;

if(front==NULL && rear==NULL)

front=temp;

rear=temp;

return;

rear->next=temp;

rear=temp;

void pop()
{

struct Node* temp=front;

if(front==NULL)

return;

if(front==rear)

front=rear=NULL;

else

front=front->next;

free(temp);

int Front()

return front->data;

int isEmpty()

return front==NULL;

void bfs(int s)

memset(vis,0,sizeof(vis));

vis[s]=1;

push(s);

k=0;

while(!isEmpty())

int i,u=Front();

ara[k++]=u;

pop();
for(i=1;i<=n;i++)

if(grid[u][i]==1 && !vis[i])

push(i);

vis[i]=1;

int main()

int i,u,v,s;

scanf("%d %d",&n,&m);

for(i=0;i<m;i++)

scanf("%d %d",&u,&v);

grid[u][v]=1;

grid[v][u]=1;

printf("Enter starting node : ");

scanf("%d",&s);

bfs(s);

printf("Nodes reachable from Node %d is : ",s);

for(i=1;i<k;i++)

printf("%d ",ara[i]);

}
DFS

#include <bits/stdc++.h>

#define N 10000

using namespace std;

int n,m,grid[N][N],vis[N];

void dfs(int u)

vis[u]=1;

printf(" %d",u);

for(int i=1;i<=n;i++)

if(grid[u][i]==1 && !vis[i])

dfs(i);

int main()

int i,u,v;

scanf("%d %d",&n,&m);

for(i=0;i<m;i++)

scanf("%d %d",&u,&v);

grid[u][v]=1;

grid[v][u]=1;

memset(vis,0,sizeof(vis));

printf("DFS traversal :");

for(i=1;i<=n;i++)
{

if(!vis[i])

dfs(i);

Tree Treversal Recursive


#include <bits/stdc++.h>

using namespace std;

struct Node

int data;

Node* right;

Node* left;

};

Node* create(int data)

Node* newNode=(struct Node*)malloc(sizeof(struct Node));

newNode->data=data;

newNode->left=newNode->right=NULL;

return newNode;

Node* Insert(Node* root,int data)

if(root==NULL)

root=create(data);

else if(data<=root->data)

root->left=Insert(root->left,data);
else

root->right=Insert(root->right,data);

return root;

void printPostorder(Node* node)

if (node==NULL)

return;

printPostorder(node->left);

printPostorder(node->right);

printf("%d ",node->data);

void printInorder(Node* node)

if (node==NULL)

return;

printInorder(node->left);

printf("%d ",node->data);

printInorder(node->right);

void printPreorder(Node* node)

if (node==NULL)

return;

printf("%d ",node->data);

printPostorder(node->left);

printPostorder(node->right);

}
int main()

Node* root=NULL;

int i,n,k;

printf("Enter number of nodes : ");

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&k);

root=Insert(root,k);

printf ("Post traversal : \n");

printPostorder(root);

printf ("\nInorder traversal : \n");

printInorder(root);

printf ("\nPreorder traversal : \n");

printPreorder(root);

Tree Treversal Non-Recursive


#include <bits/stdc++.h>

using namespace std;

struct Node

int data;

Node* right;

Node* left;

};

Node* root;
Node* create(int data)

Node* newNode=(struct Node*)malloc(sizeof(struct Node));

newNode->data=data;

newNode->left=newNode->right=NULL;

return newNode;

Node* Insert(Node* root,int data)

if(root==NULL)

root=create(data);

else if(data<=root->data)

root->left=Insert(root->left,data);

else

root->right=Insert(root->right,data);

return root;

void post(Node* node)

if (node==NULL)

return;

stack<Node*>s;

stack<int>st;

s.push(root);

while(!s.empty())

Node* cur=s.top();

s.pop();
st.push(cur->data);

if(cur->left)

s.push(cur->left);

if(cur->right)

s.push(cur->right);

while(!st.empty())

printf("%d ",st.top());

st.pop();

void in(Node* node)

if (node==NULL)

return;

stack<Node*>s;

Node *cur=root;

while (cur!=NULL || !s.empty())

while(cur!=NULL)

s.push(cur);

cur=cur->left;

cur=s.top();

s.pop();

printf("%d ",cur->data);

cur=cur->right;
}

void pre(Node* node)

if(node==NULL)

return;

stack<Node*>s;

s.push(root);

while(!s.empty())

struct Node* temp=s.top();

s.pop();

printf("%d ",temp->data);

if(temp->right)

s.push(temp->right);

if(temp->left)

s.push(temp->left);

int main()

root=NULL;

int i,n,k;

printf("Enter number of nodes : ");

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&k);

root=Insert(root,k);
}

printf ("Post traversal : \n");

post(root);

printf ("\nInorder traversal : \n");

in(root);

printf ("\nPreorder traversal : \n");

pre(root);

BST (Insert, delete,search,min,max,successor, predecessor)

#include <bits/stdc++.h>

using namespace std;

struct Node

int data;

Node* right;

Node* left;

};

Node* create(int data)

Node* temp=new Node();

temp->data=data;

temp->left=NULL;

temp->right=NULL;

return temp;

Node* minval(Node* node)

{
Node* cur=node;

while(cur->left!=NULL)

cur=cur->left;

return cur;

Node* maxval(Node* node)

Node* cur=node;

while(cur->right!=NULL)

cur=cur->right;

return cur;

Node* insert(Node* root,int data)

if(root==NULL)

root=create(data);

else if(data<=root->data)

root->left=insert(root->left,data);

else

root->right=insert(root->right,data);

return root;

Node* del(Node* root,int data)

if(root==NULL)

return root;

if(data<root->data)

root->left=del(root->left,data);

else if(data>root->data)
root->right=del(root->right,data);

else

if(root->left==NULL)

struct Node* temp=root->left;

free(root);

return temp;

struct Node* temp=minval(root->right);

root->data=temp->data;

root->right=del(root->right,temp->data);

return root;

void inorder(Node* node)

if(node==NULL)

return;

inorder(node->left);

printf("%d ",node->data);

inorder(node->right);

int search(Node* node,int val)

if(node==NULL)

return 0;
if(node->data==val)

return 1;

int res=0;

res+=search(node->left,val);

res+=search(node->right,val);

return res>0;

void findpredecessor(Node* node,Node*& pre,int val)

if(node==NULL)

return;

if(node->data==val)

if(node->left!=NULL)

Node* cur=node->left;

while(cur->right!=NULL)

cur=cur->right;

pre=cur;

if(node->data>val)

findpredecessor(node->left,pre,val);

else

pre=node;

findpredecessor(node->right,pre,val);
}

void findsuccessor(Node* node,Node*& suc,int val)

if(node==NULL)

return;

if(node->data==val)

if(node->right!=NULL)

Node* cur=node->right;

while(cur->left!=NULL)

cur=cur->left;

suc=cur;

if(node->data>val)

suc=node;

findsuccessor(node->left,suc,val);

else

findsuccessor(node->right,suc,val);

int main()

Node* root=NULL;
int i,n,k;

root=insert(root,75);

root=insert(root,80);

root=insert(root,65);

root=insert(root,90);

root=insert(root,45);

root=insert(root,70);

root=insert(root,85);

printf("Max value is %d\n",maxval(root)->data);

printf("Min value is %d\n",minval(root)->data);

int key=50;

if(search(root,key)==0)

printf("Not found\n");

else

printf("Found\n");

Node* suc=NULL,*pre=NULL;

findsuccessor(root,suc,key);

printf("Successor of %d is %d\n",key,suc->data);

findpredecessor(root,pre,key);

printf("Successor of %d is %d\n",key,pre->data);

printf("Inorder traversal : ");

inorder(root);

root=del(root,70);

printf("\nInorder traversal after deleting : ");

inorder(root);

}
ONLINE
Balanced Parenthesis Check

#include <bits/stdc++.h>

using namespace std;

struct Node

char data;

struct Node* next;

};

struct Node* top;

void push(char ch)

struct Node *newNode;

newNode=(struct Node*)malloc(sizeof(struct Node));

newNode->data=ch;

if(top==NULL)

newNode->next=NULL;

else

newNode->next=top;

top=newNode;

void pop()

if(top==NULL)

return;
else

struct Node *temp=top;

top=temp->next;

free(temp);

char Top()

return top->data;

bool isEmpty()

if(top==NULL)

return true;

return false;

int main()

top=NULL;

char a[1000];

gets(a);

int i;

for(i=0;i<strlen(a);i++)

if(isEmpty())

push(a[i]);

continue;
}

if(a[i]=='(' || a[i]=='{' || a[i]=='[')

push(a[i]);

else

if(a[i]==')')

if(Top()=='(')

pop();

else

break;

else if(a[i]=='}')

if(Top()=='{')

pop();

else

break;

else if(a[i]==']')

if(Top()=='[')

pop();

else

break;

if(isEmpty())
puts("Balanced");

else

puts("Not balanced");

Tower of Hanoi 4 pegs


#include <stdio.h>

int cnt=0;

void hanoi(int n,int from,int to,int aux1,int aux2)

if(n==0)

return;

if(n==1)

printf("Move disk %d from rod %d to rod %d\n",n,from,to);

cnt++;

return;

hanoi(n-2,from,aux1,aux2,to);

printf("Move disk %d from rod %d to rod %d\n",n-1,from,aux2);

printf("Move disk %d from rod %d to rod %d\n",n,from,to);

printf("Move disk %d from rod %d to rod %d\n",n-1,aux2,to);

cnt+=3;

hanoi(n-2,aux1,to,from,aux2);

int main()

int n;

scanf("%d",&n);

hanoi(n,1,4,2,3);
printf("Movement = %d",cnt);

Infix to postfix + Valid check

#include <bits/stdc++.h>

using namespace std;

char a[100],s[100],c;

int temp;

struct Node

char data;

int data2;

struct Node* next;

};

struct Node* top=NULL;

void push(int choice)

struct Node *newNode;

newNode=(struct Node*)malloc(sizeof(struct Node));

if(choice==1)

newNode->data=c;

else if(choice==2)

newNode->data2=temp;

if(top==NULL)

newNode->next=NULL;

else

newNode->next=top;

top=newNode;

}
void pop()

if(top==NULL)

return;

else

struct Node *temp=top;

top=temp->next;

free(temp);

char Top(int choice)

if(choice==1)

return top->data;

return top->data2;

int isEmpty()

return top==NULL;

int isAlpha(char ch)

return ch>='a' && ch<='z';

int isNum(char ch)

return ch>='0' && ch<='9';

}
int isOp(char ch)

return ch=='+' || ch=='-' || ch=='*' || ch=='/';

int prec(char ch)

int n=-1;

if(ch=='/')

n=3;

else if(ch=='*')

n=2;

else if(ch=='+' || ch=='-')

n=1;

return n;

void getpostfix()

int i,j=0;

for(i=0;i<strlen(a)-1;i++)

if(isOp(a[i]) && isOp(a[i+1]))

printf("Not valid");

return;

int cnt=0;

for(i=0;i<strlen(a);i++)

{
if(isAlpha(a[i]) || isNum(a[i]))

cnt++;

if(!cnt)

printf("Not valid");

return;

cnt=0;

for(i=0;i<strlen(a);i++)

if(isOp(a[i]))

cnt++;

if(!cnt)

printf("Not valid");

return;

for(i=0;i<strlen(a);i++)

if(isAlpha(a[i]) || isNum(a[i]))

s[j++]=a[i];

else if(a[i]=='(')

c='(';

push(1);

}
else if(a[i]==')')

while(!isEmpty() && Top(1)!='(')

s[j++]=Top(1);

pop();

if(isEmpty())

printf("Not valid");

return;

if(Top(1)=='(')

pop();

else

printf("Not valid");

return;

else

while(!isEmpty() && prec(a[i])<=prec(Top(1)))

s[j++]=Top(1);

pop();

c=a[i];

push(1);
}

while(!isEmpty())

s[j++]=Top(1);

pop();

s[j]='\0';

for(i=0;s[i];i++)

if(s[i]=='(' || s[i]==')')

printf("Not valid");

return;

printf("Postfix : %s\n",s);

printf("Valid");

int main()

gets(a);

getpostfix();

BFS (Print all node’s level/distance from root)

#include <bits/stdc++.h>

#define N 100
using namespace std;

int n,m,vis[N],level[N],grid[N][N];

struct Node

int data;

struct Node* next;

};

struct Node* front=NULL;

struct Node* rear=NULL;

void push(int x)

struct Node* temp=(struct Node*)malloc(sizeof(struct Node*));

temp->data=x;

temp->next=NULL;

if(front==NULL && rear==NULL)

front=temp;

rear=temp;

return;

rear->next=temp;

rear=temp;

void pop()

if(front==NULL)

return;

struct Node* temp=front;

if(front==rear)
{

front=NULL;

rear=NULL;

else

front=front->next;

free(temp);

int Front()

return front->data;

int isEmpty()

return front==NULL;

void bfs(int u)

vis[u]=1;

push(u);

while(!isEmpty())

int i,v=Front();

pop();

for(i=0;i<n;i++)

if(grid[v][i] && !vis[i])

vis[i]=1;
level[i]=level[v]+1;

push(i);

int main()

scanf("%d",&n);

int i,a,b;

for(i=0;i<n-1;i++)

scanf("%d %d",&a,&b);

grid[a][b]=1;

grid[b][a]=1;

int s;

scanf("%d",&s);

bfs(s);

printf("Node\tLevel\n");

for(i=0;i<n;i++)

printf("%d\t%d\n",i,level[i]);

BST build + Valid check

#include <bits/stdc++.h>

using namespace std;

struct Node
{

int data;

Node* right;

Node* left;

};

Node* create(int data)

Node* temp=(struct Node*)malloc(sizeof(struct Node));

temp->data=data;

temp->left=NULL;

temp->right=NULL;

return temp;

Node* insert(Node* root,int data)

if(root==NULL)

root=create(data);

else if(data<=root->data)

root->left=insert(root->left,data);

else

root->right=insert(root->right,data);

return root;

void pre(Node* node)

if(node==NULL)

return;

printf("%d ",node->data);

pre(node->left);
pre(node->right);

void in(Node* node)

if(node==NULL)

return;

in(node->left);

printf("%d ",node->data);

in(node->right);

int isBst(Node* node)

if(node==NULL)

return 1;

if(node->left!=NULL && node->left->data>node->data)

return 0;

if(node->right!=NULL && node->right->data<node->data)

return 0;

if(!isBst(node->left) || !isBst(node->right))

return 0;

return 1;

int main()

Node* root=NULL;

int i,n,k;

root=insert(root,50);

root=insert(root,40);

root=insert(root,60);
root=insert(root,30);

root=insert(root,45);

root=insert(root,55);

root=insert(root,70);

root=insert(root,20);

root=insert(root,35);

in(root);

puts("");

pre(root);

puts("");

if(isBst(root))

puts("YES");

else

puts("NO");

Important

Number of Unmatched Parenthesis


#include <bits/stdc++.h>

using namespace std;

int cnt;

char a[10000];

struct Node

char data;

struct Node* next;

};

struct Node* top;


void push(char ch)

struct Node *newNode;

newNode=(struct Node*)malloc(sizeof(struct Node));

newNode->data=ch;

if(top==NULL)

newNode->next=NULL;

else

newNode->next=top;

top=newNode;

void pop()

if(top==NULL)

return;

else

struct Node *temp=top;

top=temp->next;

free(temp);

char Top()

return top->data;

bool isEmpty()

if(top==NULL)
return true;

return false;

void chk()

char x;

for(int i=0;i<strlen(a);i++)

if(a[i]=='(')

push('(');

continue;

if(isEmpty())

continue;

if(a[i]==')')

cnt+=2;

pop();

int main()

top=NULL;

gets(a);

chk();

printf("%d",strlen(a)-cnt);

}
Tower of Hanoi for N disk, K pegs

#include<bits/stdc++.h>

using namespace std;

#define INF 1000000000000000000

long long int mov[51][51][51],inn[51][51];

long long int func(long long int a,long long int b,long long int k)

if(a==0)

return 0;

if(a==1)

if(b<2)

return INF;

return 1;

if(b<3)

return INF;

long long int &aa=mov[a][b][k];

long long int &iin=inn[a][b];

if(aa!=-1)

return aa;

aa=INF;

if(iin!=-1)

if(iin>=k)

aa=func(iin,b,1)+func(a-iin,b-1,1)+func(iin,b,k);
else

aa=func(iin,b,1)+func(a-iin,b-1,k-iin);

return aa;

long long int ab=INF,in;

for(int i=1;i<a;i++)

long long int bb=2*func(i,b,1)+func(a-i,b-1,1);

if(bb<ab)

ab=bb;

in=i;

iin=in;

if(in>=k)

aa=func(in,b,1)+func(a-in,b-1,1)+func(in,b,k);

else

aa=func(in,b,1)+func(a-in,b-1,k-in);

return aa;

int main()

memset(mov,-1,sizeof(mov));

memset(inn,-1,sizeof(inn));

int disk,peg;

scanf("%d %d",&disk,&peg);

long long int tot=func(disk,peg,1);

If(tot==INF)
puts("Not possible");

else

printf("Movemnet = %lld",tot);

Number of connected components in graph

#include <bits/stdc++.h>

#define N 10000

using namespace std;

int n,m,grid[N][N],vis[N];

void dfs(int u)

vis[u]=1;

for(int i=1;i<=n;i++)

if(grid[u][i]==1 && !vis[i])

dfs(i);

int main()

int i,u,v;

scanf("%d %d",&n,&m);

for(i=0;i<m;i++)

scanf("%d %d",&u,&v);

grid[u][v]=1;

grid[v][u]=1;

}
memset(vis,0,sizeof(vis));

int comp=0;

for(i=1;i<=n;i++)

if(!vis[i])

comp++;

dfs(i);

printf("Number of components in graph is %d",comp);

Detect Cycle in graph

#include <bits/stdc++.h>

#define N 10000

using namespace std;

int grid[N][N],color[N];

int n,m,flag=0;

void dfs(int u)

color[u]=1;

for(int i=1;i<=n;i++)

if(grid[u][i]==1)

if(color[i]==0)

dfs(i);

else if(color[i]==1)
{

flag=1;

return;

color[u]=2;

int main()

int i,u,v;

scanf("%d %d",&n,&m);

for(i=0;i<m;i++)

scanf("%d %d",&u,&v);

grid[u][v]=1;

memset(color,0,sizeof(color));

for(i=1;i<=n;i++)

if(color[i]==0)

dfs(i);

if(flag==1)

puts("Cycle exists");

else

puts("No cycle");

}
Shortest Distance from source to destination
#include <bits/stdc++.h>

#define N 10000

using namespace std;

int n,m,grid[N][N];

int k,vis[N],cost[N];

struct Node

int data;

struct Node* next;

};

struct Node* front=NULL;

struct Node* rear=NULL;

void push(int x)

struct Node* temp=(struct Node*)malloc(sizeof(struct Node));

temp->data=x;

temp->next=NULL;

if(front==NULL && rear==NULL)

front=temp;

rear=temp;

return;

rear->next=temp;

rear=temp;

}
void pop()

struct Node* temp=front;

if(front==NULL)

return;

if(front==rear)

front=rear=NULL;

else

front=front->next;

free(temp);

int Front()

return front->data;

int isEmpty()

return front==NULL;

void bfs(int s,int d)

memset(vis,0,sizeof(vis));

memset(cost,0,sizeof(vis));

vis[s]=1;

cost[s]=0;

push(s);

while(!isEmpty())

int i,u=Front();
pop();

if(u==d)

return;

for(i=1;i<=n;i++)

if(grid[u][i]==1 && !vis[i])

push(i);

vis[i]=1;

cost[i]=cost[u]+1;

int main()

int i,u,v,s,d;

scanf("%d %d",&n,&m);

for(i=0;i<m;i++)

scanf("%d %d",&u,&v);

grid[u][v]=1;

grid[v][u]=1;

printf("Enter source : ");

scanf("%d",&s);

printf("Enter destination : ");

scanf("%d",&d);

bfs(s,d);
printf("Shortest distance from %d to %d is %d\n",s,d,cost[d]);

Height of a tree (BFS)

#include <bits/stdc++.h>

#define N 100

using namespace std;

int n,m,vis[N],level[N],grid[N][N],mx=-1;

struct Node

int data;

struct Node* next;

};

struct Node* front=NULL;

struct Node* rear=NULL;

void push(int x)

struct Node* temp=(struct Node*)malloc(sizeof(struct Node*));

temp->data=x;

temp->next=NULL;

if(front==NULL && rear==NULL)

front=temp;

rear=temp;

return;

rear->next=temp;

rear=temp;
}

void pop()

if(front==NULL)

return;

struct Node* temp=front;

if(front==rear)

front=NULL;

rear=NULL;

else

front=front->next;

free(temp);

int Front()

return front->data;

int isEmpty()

return front==NULL;

void bfs(int u)

vis[u]=1;

push(u);

while(!isEmpty())
{

int i,v=Front();

pop();

for(i=1;i<=n;i++)

if(grid[v][i] && !vis[i])

vis[i]=1;

level[i]=level[v]+1;

mx=max(mx,level[i]);

push(i);

int main()

scanf("%d",&n);

int i,a,b;

for(i=0;i<n-1;i++)

scanf("%d %d",&a,&b);

grid[a][b]=1;

int root;

printf("Enter source : ");

scanf("%d",&root);

bfs(root);

printf("Height of the tree is %d",mx+1);


}

Height of Binary tree/BST


#include <bits/stdc++.h>

using namespace std;

struct Node

int data;

Node* right;

Node* left;

};

Node* create(int data)

Node* temp=(struct Node*)malloc(sizeof(struct Node));

temp->data=data;

temp->left=NULL;

temp->right=NULL;

return temp;

Node* insert(Node* root,int data)

if(root==NULL)

root=create(data);

else if(data<=root->data)

root->left=insert(root->left,data);

else

root->right=insert(root->right,data);

return root;
}

int height(Node* node)

if(node==NULL)

return 0;

return max(height(node->left)+1,height(node->right)+1);

int main()

Node* root=NULL;

int i,n,k;

root=insert(root,50);

root=insert(root,40);

root=insert(root,60);

root=insert(root,30);

root=insert(root,45);

root=insert(root,55);

root=insert(root,70);

root=insert(root,20);

root=insert(root,35);

printf("Height of the tree is %d",height(root));

You might also like