/*1. MERGE SORT USING DIVIDE AND CONQUER METHOD */
#include<iostream.h>
#include<conio.h>
class mergesort
{
int a[20];
void merge(int,int,int);
public:
void create(int);
void merge_sort(int,int);
void print(int);
};
void mergesort :: create(int n)
{
int i;
cout<<"\n Enter the array elements\n";
for(i=0;i<n;i++)
cin>>a[i];
}
void mergesort :: merge_sort(int p,int r)
{
int q;
if(p<r)
{
q=((p+r)/2);
merge_sort(p,q);
merge_sort(q+1,r);
merge(p,q,r);
}
}
void mergesort :: merge(int x,int y,int z)
{
int n1=y-x+1,n2=z-y,i,j,k,l[20],r[20];
for(i=1;i<=n1;i++)
l[i]=a[x+i-1];
for(j=1;j<=n2;j++)
r[j]=a[y+j];
l[n1+1]=999;
r[n2+1]=999;
i=j=1;
for(k=x;k<=z;k++)
{
if(l[i]<=r[j])
{
a[k]=l[i];
i=i+1;
}
else
{
a[k]=r[j];
j=j+1;
}
}
}
void mergesort :: print(int n)
{
int i;
cout<<"\n After sorting the elements are \n";
for(i=0;i<n;i++)
cout<<a[i];
}
void main()
{
int l,n,r;
mergesort ob;
clrscr();
cout<<"\n\t\t\t merge sort";
cout<<"\n\t\t\t ~~~~~~~~~~~";
cout<<"\n Enter the size of the array:";
cin>>n;
ob.create(n);
l=0;
r=n-1;
ob.merge_sort(l,r);
ob.print(n);
getch();
}
OUTPUT:
MERGE SORT
~~~~~~~~~~~
Enter the size of the array: 5
Enter the array elements
77
88
99
45
22
After sorting the elements are
22
45
77
88
99
/*2. STRASSEN’S MATRIX MULTIPLICATION */
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
class strassen
{
int a[2][2],b[2][2],c[2][2];
public:
void product()
{
int q1,q2,q3,q4,q5,q6,q7;
q1=(a[1][1]+a[2][2])*(b[1][1]+b[2][2]);
q2=(a[2][1]+a[2][2])*b[1][1];
q3=a[1][1]*(b[1][2]-b[2][2]);
q4=a[2][2]*(-b[1][1]+b[2][1]);
q5=(a[1][1]+a[1][2])*b[2][2];
q6=(-a[1][1]+a[2][1])*(b[1][1]+b[1][2]);
q7=(a[1][2]-a[2][2])*(b[2][1]+b[2][2]);
c[1][1]=q1+q4-q5+q7;
c[1][2]=q3+q5;
c[2][1]=q2+q4;
c[2][2]=q1+q3-q2+q6;
}
void read();
void display();
};
void strassen :: read()
{
cout<<"\n Enter the matrix A elements\n";
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
cin>>a[i][j];
cout<<"\n Enter the matrix B elements \n";
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
cin>>b[i][j];
}
void strassen::display()
{
cout<<"\n The product of the matrix is \n";
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
{
cout<<" "<<c[i][j];
cout<<endl;
}
}
void main()
{
strassen ob;
clrscr();
cout<<"\n\t\t\t MATRIX MULTIPLICATION";
cout<<"\n\t\t\t ~~~~~~~~~~~~~~~~~~~~~~";
ob.read();
ob.product();
ob.display();
getch();
}
OUTPUT:
MATRIX MULTIPLICATION
~~~~~~~~~~~~~~~~~~~~~~
Enter the matrix A elements
1 2
3 4
Enter the matrix B elements
5 6
7 8
The product of the matrix is
19 22
43 50
/ *3. KNAPSACK USING GREEDY METHOD * /
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
class knapsack
{
float w[10],p[10],profit,r[10],t;
int m,n,i,j,k;
public:
knapsack();
void sort();
void calc();
};
knapsack::knapsack()
{
clrscr();
cout<<"\n\t\t\tKNAPSACK PROBLEM";
cout<<"\n\t\t\t----------------";
cout<<"\n\nEnter the capacity of the bag";
cin>>m;
cout<<"\nEnter the no. of items";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"\nEnter the weight and profit of items"<<i<<":";
cin>>w[i]>>p[i];
r[i]=(float)p[i]/w[i];
}
profit=0.0;
}
void knapsack::sort()
{
for(i=1;i<=n;i++)
for(j=1;j<=n-1;j++)
{
if(r[j]<r[j+1])
{
t=r[j];
r[j]=r[j+1];
r[j+1]=t;
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
t=w[j];
w[j]=w[j+1];
w[j+1]=t;
}
}
}
void knapsack::calc()
{
for(i=1;i<=n;i++)
{
if(w[i]<=m)
{
m=m-w[i];
profit=profit+p[i];
}
else
{
profit=profit+(p[i]/w[i])*m;
break;
}
}
cout<<"Profit is : "<<profit;
}
void main()
{
knapsack k;
k.sort();
k.calc();
getch();
}
OUTPUT:
KNAPSACK PROBLEM
*********************
Enter the capacity of the bag: 20
Enter the no. of items:3
Enter the weight and profit of items1:18 25
Enter the weight and profit of items2:15 24
Enter the weight and profit of items3:1015
Profit is: 31.5
/ * 4. KRUSKAL’S MINIMUM SPANNING TREE * /
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
class kruskal
{
int p1[20],rank[20];
struct graph
{
int c,i,j;
struct graph *link;
};
typedef struct graph node;
node *head,*p,*q;
int v,u,a[20][20],n,w[20][20],t,cnt,cost;
public:
void makeset(int);
int findset(int);
void uinion(int,int);
void link(int,int);
void sort();
kruskal();
}
kruskal::kruskal()
{
clrscr();
t=1;
cnt=1;
cost=0;
cout<<"\n\t\t\tKRUSKAL'S MINIMUM SPANNING TREE";
cout<<"\n\t\t\t*******************************";
cout<<"\n\nEnter the number of vertices:";
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=-1;
for(i=1;i<=n;i++)
makeset(i);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if((a[i][j]==-1)&&(i!=j))
{
cout<<"\n\nEnter the cost of the edge"<<i<<"and"<<j<<":";
cin>>a[i][j];
a[j][i]=a[i][j];
if(t==1)
{
p=(node*)malloc(sizeof(node));
p->i=i;
p->j=j;
p->c=a[i][j];
p->link=NULL;
head=p;
t++;
}
else
{
q=(node*)malloc(sizeof(node));
q->i=i;
q->j=j;
q->c=a[i][j];
q->link=NULL;
p->link=q;
p=q;
cnt=cnt+1;
}
}
}
sort();
p=head;
t=1;
cout<<"\nThe minimum spanning tree is\n";
while(p!=NULL)
{
if(findset(p->i)!=findset(p->j))
{
uinion(p->i,p->j);
cost=cost+p->c;
cout<<p->i<<"-->"<<p->j<<endl;
}
p=p->link;
}
cout<<"\nThe cost is:"<<cost;
}
void kruskal::sort()
{
for(int i=1;i<=cnt;i++)
{
p=head;
for(int j=1;j<=cnt-i;j++)
{
if(p->c>p->link->c&&p->link!=NULL)
{
int t=p->c;
p->c=p->link->c;
p->link->c=t;
t=p->i;
p->i=p->link->i;
p->link->i=t;
t=p->j;
p->j=p->link->j;
p->link->j=t;
p=p->link;
}
else p=p->link;
}
}
}
void kruskal::makeset(int x)
{
p1[x]=x;
rank[x]=0;
}
void kruskal::uinion(int x,int y) //adding to the list
{
link(findset(x),findset(y));
}
void kruskal::link(int x,int y) //checking for cyclic
{
if(rank[x]>rank[y])
p1[y]=x;
else p1[x]=y;
if(rank[x]==rank[y])
rank[y]=rank[y]+1;
}
int kruskal::findset(int x) //path compression
{
if(x!=p1[x])
p1[x]=findset(p1[x]);
return p1[x];
}
void main() //main program
{
kruskal k;
getch();
}
OUTPUT:
KRUSKAL'S MINIMUM SPANNING TREE
***************************************
Enter the number of vertices:4
Enter the cost of the edge1and2:5
Enter the cost of the edge1and3:10
Enter the cost of the edge1and4:999
Enter the cost of the edge2and3:999
Enter the cost of the edge2and4:15
Enter the cost of the edge3and4:20
The minimum spanning tree is
1-->2
1-->3
2-->4
The cost is:30
/ *5. BREADTH FIRST SEARCH */
#include<iostream.h>
#include<conio.h>
int a[10][10],visited[10],n;
void search_from1(int);
void main()
{
int i,j;
clrscr();
cout<<"\n Enter the number of nodes:";
cin>>n;
cout<<"\n Enter the adjancency matrix:\n";
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
{
cout<<"\nEnter the value of "<<i<<j<<”element”;
cin>>a[i][j];
}
cout<<"\n Nodes are visited in the order";
for(i=1;i<=n;i++)
if(visited[i]==0)
search_from1(i);
getch();
}
void search_from1(int z)
{
int i,j;
cout<<"-->"<<z;
visited[z]=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(visited[i]==0)
if(a[z][j]!=0)
search_from1(i);
break;
}
getch();
}
OUTPUT:
BREADTH FIRST SEARCH
Enter the number of nodes:4
Enter the adjancency matrix:
Enter the value of 12 element 1
Enter the value of 13 element 0
Enter the value of 14 element 0
Enter the value of 21 element 1
Enter the value of 23 element 0
Enter the value of 24 element 1
Enter the value of 31 element 1
Enter the value of 32 element 0
Enter the value of 34 element 0
Enter the value of 41 element 0
Enter the value of 42 element 1
Enter the value of 43 element 1
Nodes are visited in the order
-->1-->2-->3-->4
*6. DEPTH FIRST SEARCH * /
#include<iostream.h>
#include<conio.h>
int a[10][10],visited[10],n;
void search_from(int);
void main()
{
int i,j;
clrscr();
cout<<"\n Enter the number of nodes:";
cin>>n;
cout<<"\n Enter the adjancency matrix:\n";
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
{
cout<<"\nEnter the value of "<<i<<j<<” element”;
cin>>a[i][j];
}
cout<<"\n Nodes are visited in the order";
for(i=1;i<=n;i++)
if(visited[i]==0)
search_from(i);
getch();
}
void search_from(int k)
{
int i,j;
cout<<"-->"<<k;
visited[k]=1;
for(i=1;i<=n;i++)
if(visited[i]==0)
if(a[k][i]!=0)
search_from(i);
getch();
}
OUTPUT:
DEPTH FIRST SEARCH
Enter the number of nodes:5
Enter the adjancency matrix:
Enter the value of 12 element 0
Enter the value of 13 element 1
Enter the value of 14 element 0
Enter the value of 15 element 0
Enter the value of 21 element 0
Enter the value of 23 element 0
Enter the value of 24 element 0
Enter the value of 25 element 1
Enter the value of 31 element 0
Enter the value of 32 element 1
Enter the value of 34 element 1
Enter the value of 35 element 0
Enter the value of 41 element 0
Enter the value of 42 element 0
Enter the value of 43 element 0
Enter the value of 45 element 0
Enter the value of 51 element 0
Enter the value of 52 element 0
Enter the value of 53 element 0
Enter the value of 54 element 0
Nodes are visited in the order
-->1-->3-->2-->5-->4
/ *7. BINARY TREE TRAVERSAL */
#include<iostream.h>
#include<conio.h>
#include<malloc.h>
struct bnode
{
int data;
struct bnode *left,*right;
}*bt;
void create()
{
struct bnode *temp,*p,*pre;
int flag,key,d;
bt=NULL;
cout<<"\n \t Read the value until -1 to exit:\n\t ";
cin>>d;
while(d!=-1)
{
temp=(struct bnode *)(malloc(sizeof(struct bnode)));
temp->data=d;
temp->left=NULL;
temp->right=NULL;
if(bt==NULL)
bt=temp;
else
{
p=bt;
pre=bt;
while(p!=NULL)
{
key=p->data;
if(d<key)
{
flag=0;
pre=p;
p=p->left;
}
else if(d>key)
{
flag=1;
pre=p;
p=p->right;
}
}
if(flag==0)
pre->left=temp;
else
pre->right=temp;
}
cin>>d;
}
}
void preord(struct bnode *p)
{
if(p==NULL)
return;
cout<<"\t"<<p->data;
if(p->left!=NULL)
preord(p->left);
if(p->right)
preord(p->right);
}
void postord(struct bnode *p)
{
if(p==NULL)
return;
if(p->left)
postord(p->left);
if(p->right)
postord(p->right);
cout<<"\t"<<p->data;
}
void inord(struct bnode *p)
{
if(p==NULL)
return;
if(p->left)
inord(p->left);
cout<<"\t"<<p->data;
if(p->right)
inord(p->right);
}
void main()
{
clrscr();
create();
cout<<"\n\tINORDER TRAVERSAL\n\t";
inord(bt);
cout<<"\n\tPREORDER TRAVERSAL\n\t";
preord(bt);
cout<<"\n\tPOSTORDER TRAVERSAL\n\t";
postord(bt);
getch();
}
OUTPUT:
BINARY TREE TRAVERSAL
~~~~~~~~~~~~~~~~~~~~~~~~~~
Read the value until -1 to exit:
45 67 89 34 12 78 110 -1
INORDER TRAVERSAL
12 34 45 67 78 89 110
PREORDER TRAVERSAL
45 34 12 67 89 78 110
POSTORDER TRAVERSAL
12 34 78 110 89 67 45
/ *8. SHORTEST PATH * /
#include<iostream.h>
#include<conio.h>
void shortestpath(int ,int);
int graph,costs=32760,cost1,num,sor,dest,edge;
int from[20],to[20],cost[20],path[10];
void shortestpath(int graph,int z)
{
int temp,k=0,i=-1,p[10];
for(temp=z;temp<edge;temp++)
{
if(graph==from[temp])
{
p[k]=graph;
i++;
if(to[temp]==dest)
{
cost1=cost1+cost[temp];
if(cost1<costs)
{
costs=cost1;
for(z=0;z<=i;z++)
path[z]=p[z];
num=temp;
break;
}
}
else
{
graph=to[temp];
cost1=cost1+cost[temp];
k++;
}
}
}
}
void main()
{
int i,z,cost2;
clrscr();
cout<<"\n Enter the number of edge:";
cin>>edge;
cout<<"\nEnter the source:";
cin>>sor;
cout<<"\nEnter the destination";
cin>>dest;
cout<<"\nDestination"<<"\t\t"<<"Cost";
for(i=0;i<edge;i++)
{
cout<<"From";
cin>>from[i];
cout<<"\nTo";
cin>>to[i];
cout<<"\nCost";
cin>>cost[i];
}
for(i=0;i<edge;i++)
{
if(sor==from[i])
{
graph=to[i];
cost2=cost[i];
for(z=i;z<edge;z++)
{
if(graph==from[z])
{
cost1=cost2;
shortestpath(graph,z);
}
else if(graph==dest)
{
cost1=cost2;
if(cost1<costs)
{
costs=cost1;
num=0;
break;
}
}
}
}
}
cout<<"Cost:"<<costs;
cout<<"Path:"<<sor;
for(z=0;z<num;z++)
cout<<"->"<<path[z];
cout<<"->"<<dest;
getch();
}
OUTPUT:
SHORTEST PATH
Enter the number of edge: 3
Enter the source: 1
Enter the destination: 3
Source Destination Cost
From1
To2
Cost7
From1
To5
Cost7
From1
To3
Cost78
Cost: 78, Path: 1->3
/* 9.QUEENS PROBLEM USING BACKTRACKING */
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<process.h>
#include<graphics.h>
class queen
{
int n,x[100];
public:
queen();
void nqueen(int,int);
int place(int,int);
};
queen::queen()
{
int k=1;
textcolor(GREEN);
cprintf("Enter the number of queens:");
cin>>n;
nqueen( k, n);
}
void queen::nqueen(int k,int n)
{
for(int i=1;i<=n;i++)
{
if(place(k,i))
{
x[k]=i;
clrscr();
if(k==n)
{
for(int j=1;j<=n;j++)
{textcolor(x[j]);
gotoxy(1,j);
cprintf("queen %d : %d",j,x[j]);
}
getch();
break;
}
else
nqueen(k+1,n);
}
}
return;
}
int queen::place(int k,int i)
{
int j;
for(j=1;j<=k;j++)
{
if((x[j]==i)||(abs(x[j]-i)==abs(j-k)))
return 0;
}
return 1;
}
void main()
{
clrscr();
queen q;
}
OUTPUT:
/* QUEENS PROBLEM USING BACKTRACKING */
Enter the number of queens: 8
queen 1: 1
queen 2: 5
queen 3 : 8
queen 4 : 6
queen 5 : 3
queen 6 : 7
queen 7 : 2
queen 8 : 4
queen 1: 8
queen 2: 4
queen 3: 1
queen 4: 3
queen 5: 6
queen 6: 2
queen 7: 7
queen 8: 5
/*10. KNAPSACK USING BACKTRACKING */
#include<iostream.h>
#include<conio.h>
class knapsack
{
int m,n,w[10],p[10],fw,fp,x[10],y[10],b,c;
float r[10];
int bound(int,int,int);
public:
knapsack();
void bknap(int,int,int);
void display();
};
knapsack::knapsack()
{
fp=-1;
cout<<"\n Enter the no of items:";
cin>>n;
cout<<"\n Enter the capacity of the bag:";
cin>>m;
for(int i=1;i<=n;i++)
{
a:cout<<"\n Enter the weight and profit for the item "<<i<<":";
cin>>w[i]>>p[i];
r[i]=(float)p[i]/w[i];
if(i!=1)
if(r[i-1]<r[i])
{
cout<<"\n This entry is not valid \n";
goto a;
}
}
}
void knapsack::display()
{
cout<<"\n\n The selected items are \n\n";
for(int i=1;i<=n;i++)
cout<<" "<<i;
cout<<endl;
for(int j=1;j<=n;j++)
cout<<" "<<"**";
cout<<endl;
for(i=1;i<=n;i++)
cout<<" "<<x[i];
cout<<"\n\n Final weight="<<fw;
cout<<"\n\n Final profit="<<fp;
}
void knapsack::bknap(int k,int cp,int cw)
{
if(cw+w[k]<=m)
{
y[k]=1;
if(k<n)bknap(k+1,cp+p[k],cw+w[k]);
if(((cp+p[k])>fp)&&(k==n))
{
fp=cp+p[k];
fw=cw+w[k];
for(int j=1;j<=k;j++)
x[j]=y[j];
}
}
if(bound(cp,cw,k)>=fp)
{
y[k]=0;
if(k<n)bknap(k+1,cp,cw);
if((cp>fp)&&(k==n))
{
fp=cp;
fw=cw;
for(int j=1;j<=k;j++)
x[j]=y[j];
}
}
}
int knapsack::bound(int cp,int cw,int k)
{
b=cp;
c=cw;
for(int i=k+1;i<=n;i++)
{
c=c+w[i];
if(c<m)
b=b+p[i];
else return(b+(1-(c-m)/w[i])*p[i]);
}
return b;
}
void main()
{
clrscr();
cout<<"\n\t\t\t KNAPSACK USING BACKTRACKING";
cout<<"\n\t\t\t ***************************";
knapsack ob;
int k=1,cp=0,cw=0;
ob.bknap(k,cp,cw);
ob.display();
getch();
}
OUTPUT:
KNAPSACK USING BACKTRACKING
**********************************
Enter the no of items: 8
Enter the capacity of the bag: 110
Enter the weight and profit for the item 1:1 11
Enter the weight and profit for the item 2:11 21
Enter the weight and profit for the item 3:21 31
Enter the weight and profit for the item 4:23 33
Enter the weight and profit for the item 5:33 43
Enter the weight and profit for the item 6:43 53
Enter the weight and profit for the item 7:45 55
Enter the weight and profit for the item 8:55 65
The selected items are
1 2 3 4 5 6 7 8
** ** ** ** ** ** ** **
1 1 1 0 1 1 0 0
Final weight=109
Final profit=159
0 comments:
Post a Comment