Untitled
unknown
plain_text
2 years ago
33 kB
12
Indexable
1.Write a program for creating max./min. heap using INSERT.
#include<iostream.h>
#include<conio.h>
class HEAP
{
int n, A[200];
public:
HEAP(int);
void INSERT(int);
void SET_ELE();
void GET_ELE();
}
HEAP::HEAP(int par)
{
n=par;
}
void HEAP::INSERT(int no)
{
int j =no;
int i=no/2;
int item = A[no]; //new ele to be added in exhi. heap
while(i>0 && A[i] < item) //not a root && parent < new ele
{
A[j] = A[i]; //shift the parent down
j = i; // move the pair of ptrs up
i= i/2;
}
A[j]=item;
}
void HEAP::GET_ELE()
{
cout<<endl;
for(int i=1;i<=n;i++)
cout<<A[i]<<" ";
}
void HEAP::SET_ELE()
{
cout<<endl<<"Enter elements is:\n ";
for(int i=1;i<=n;i++)
cin>>A[i];
}
void main()
{
clrscr();
int n;
cout<<"Enter Total Numbers of elements:\n";
cin>>n;
HEAP obj(n);
obj.SET_ELE();
for(int i=2;i<=n;i++)
obj.INSERT(i);
cout<<endl<<"Heap elements are : ";
obj.GET_ELE();
getch();
}
2. Write a program for creating max./min. heap using ADJUST/HEAPIFY.
#include<iostream.h>
#include<conio.h>
class HEAP
{
int n, A[100];
public:
HEAP(int);
void HEAPIFY(int);
void ADJUST(int);
void SET_ELE();
void GET_ELE();
};
HEAP::HEAP(int para)
{
n=para;
}
void HEAP::ADJUST(int i)
{
int j=2*i;
int item=A[i];
while(j<=n)
{
if(j<n && A[j]<A[j+1])
{
j=j+1;
}
if(item >= A[j])
{
break;
}
else
{
A[j/2]=A[j];//shift the child up
j=j*2;//move the ptr down
}
}
A[j/2]=item;
}
void HEAP::HEAPIFY(int n)
{
for(int i=n/2;i>=1;i--)
{
ADJUST(i);
}
}
void HEAP::GET_ELE()
{
//cout<<endl<<"\t node \t parent";
for(int i=1;i<=n;i++)
{
cout<<A[i]<<" ";
}
}
void HEAP::SET_ELE()
{
cout<<endl<<"Enter elements:";
for(int i=1;i<=n;i++)
{
cin>>A[i];
}
}
void main()
{
clrscr();
int n;
cout<<"Enter Total Number of element: ";
cin>>n;
HEAP obj(n);
obj.SET_ELE();
obj.HEAPIFY(n);
cout<<endl<<"Heap elements are:";
obj.GET_ELE();
getch();
}
3. Write a program to implement union and find operation.
#include<iostreame.h>
#include<conio.h>
class SET
{
int n,PAR[20];
public:
SET(int);
void UNION(int,int);
int FIND(int);
void SHOW();
void MENU();
};
SET::SET(int para)
{
n=para;
for(int i=1;i<=n;i++)
{
PAR[i]=-1;
}
}
void SET::UNION(int i,int j)
{
//x is total weight of sub-trees i & j
int x=PAR[i]+PAR[j];
if(PAR[i]>PAR[j])
{
PAR[i]=j;
PAR[j]=x;
}
else
{
PAR[j]=i;
PAR[i]=x;
}
}
int SET::FIND(int i)
{
//find root first
int k,j=i;
while(PAR[j]> -1)
{
j=PAR[j];
}
//then collapse the tree
k=i;
while(k!=j)
{
int temp=PAR[k];
PAR[k]=j;
k=temp;
}
return j;
}
void SET::SHOW()
{
cout<<endl<<"\t Node \t Parent";
for(int i=1;i<=n;i++)
{
cout<<endl<<"\t"<<i<<"\t"<<PAR[i];
}
}
void SET::MENU()
{
int opt,i,j;
SHOW();
do
{
cout<<endl<<"Choose option:";
cout<<endl<<"--------------";
cout<<endl<<"1.Union";
cout<<endl<<"2.Find";
cout<<endl<<"3.Exit";
cout<<endl<<"--------------";
cout<<endl<<"Enter your option:";
cin>>opt;
switch(opt)
{
case 1:
cout<<endl<<"Enter 2 root element:";
cin>>i>>j;
UNION(i,j);
SHOW();
break;
case 2:
cout<<endl<<"Enter element to find:";
cin>>i;
cout<<endl<<"Root of "<<i<<"is"<<FIND(i);
SHOW();
break;
case 3:
return;
default:
cout<<endl<<"Invalid option:";
}
}while(1);
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter initial number of individual elements:\n";
cin>>n;
SET obj(n);
obj.MENU();
getch();
}
4. Write a program to find minimum and maximum form a given array.
#include<iostreame.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class LIST
{
int n,*A;
public:
LIST(int);
void SET_ELE();
void GET_ELE();
void MAXMIN(int,int,int&,int&);
};
LIST::LIST(int para)
{
n=para;
A=new int[n+1];
}
void LIST::GET_ELE()
{
cout<<endl;
for(int i=1;i<=n;i++)
{
cout<<endl<<A[i]<<" ";
}
}
void LIST::SET_ELE()
{
cout<<endl<<"Enter elements:";
for(int i=1;i<=n;i++)
{
A[i]=random(100);
//cin>>A[i];
}
}
void LIST::MAXMIN(int i,int j,int &fmax,int &fmin) //i is total no.of elements in heap
{
int gmax,gmin,hmax,hmin;
if(i==j)
fmax=fmin=A[i];
else
{
if(i==j-1)
{
if(A[i]>A[j])
{
fmax=A[i];
fmin=A[j];
}
else
{
fmax=A[j];
fmin=A[i];
}
}
else
{
int mid=(i+j)/2;
MAXMIN(i,mid,gmax,gmin);
MAXMIN(mid+1,j,hmax,hmin);
if(gmax>hmax)
fmax=gmax;
else
fmax=hmax;
if(gmin<hmin)
fmin=gmin;
else
fmin=hmin;
}
}
}
void main()
{
int n,max,min;
clrscr();
Timer Tobj;
cout<<"Enter Total Number of element: ";
cin>>n;
LIST obj(n);
obj.SET_ELE();
// cout<<endl<<"Elements of the List are:";
obj.GET_ELE();
Tobj.start();
obj.MAXMIN(1,n,max,min);
Tobj.stop();
//obj.GET_ELE();
cout<<endl<<"\n\n Min="<<min<<”\n”<<"And max ="<<max;
cout<<endl<<"Time taken for execution="<<Tobj.time();
getch();
}
5. Write a program for searching element form given array using binary search for 1000,2000,3000 find exact time of execution.
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class LIST
{
int *A,n;
public:
LIST(int);
void SET_ELE();
void GET_ELE();
void BINARY_SEARCH(int,int &);
void BINARY_SEARCH1(int,int &);
void SORT();
};
LIST::LIST(int par)
{
n=par;
A=new int[n+1];
}
void LIST::SET_ELE()
{
//cout<<endl<<"Enter list elements:\n";
for(int i=1;i<=n;i++)
// cin>>A[i];
A[i]=random(100);
}
void LIST::GET_ELE()
{
cout<<endl<<"List elements are:\n";
for(int i=1;i<=n;i++)
cout<<A[i]<<" ";
}
void LIST::BINARY_SEARCH(int x,int &j)
{
int low,high,mid;
low=1;
high=n;
while(low<=high)
{
mid=(low+high)/2;
if(x<A[mid])
high=mid-1;
else
{
if(x>A[mid])
low=mid+1;
else
{
j=mid;
return;
}
}
}
j=0;
}
void LIST::SORT()
{
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n-i;j++)
{
if(A[j]>A[j+1])
{
int temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
}
void LIST::BINARY_SEARCH1(int x, int &j)
{
int low,high,mid;
low=1;
high=n+1;
while(low<high-1)
{
mid=(low+high)/2;
if(x<A[mid])
high=mid;
else
low=mid;
}
if(x==A[low])
j=low;
else
j=0;
}
void main()
{
int n,pos,x;
clrscr();
Timer T;
cout<<"\n Enter Total number of element:";
cin>>n;
LIST obj(n);
obj.SET_ELE();
obj.SORT();
cout<<endl<<"Elements of the List are:\n";
obj.GET_ELE();
cout<<endl<<"Enter element to search in list:\n";
cin>>x;
T.start();
obj.BINARY_SEARCH(x,pos);
//obj.BINARY_SEARCH1(x,pos);
T.stop();
if(pos)
cout<<endl<<"Element found at:"<<pos;
else
cout<<endl<<"Element not found:";
cout<<endl<<"Time taken for execution="<<T.time();
getch();
}
6. Write a program for sorting given array in ascending/descending order with n=1000,2000, 3000 find exact time of execution using
• Heap sort:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class HEAP
{
int n,*A;
public:
HEAP(int);
void HEAP_SORT();
void HEAPIFY();
void ADJUST(int,int);
void SET_ELE();
void GET_ELE();
};
HEAP::HEAP(int para)
{
n=para;
A=new int[n+1];
}
void HEAP::HEAPIFY()
{
for(int i=n/2;i>=1;i--)
{
ADJUST(i,n);
}
}
void HEAP::HEAP_SORT()
{
HEAPIFY();
for(int i=n;i>1;i--)
{
//exchange
int temp=A[i];
A[i]=A[1];
A[1]=temp;
//heapify the disturbed heap again
ADJUST(1,i-1);
}
}
void HEAP::ADJUST(int i,int n) //i is total no.of elements in heap
{
int j=2*i;
int item=A[i];
while(j<=n)
{
if(j<n && A[j]<A[j+1])
{
j=j+1;
}
if(item >= A[j])
{
break;
}
else
{
A[j/2]=A[j];//shift the child up
j=j*2;//move the ptr down
}
}
A[j/2]=item;
}
void HEAP::GET_ELE()
{
//cout<<endl<<"\t node \t parent";
for(int i=1;i<=n;i++)
{
cout<<A[i]<<" ";
}
}
void HEAP::SET_ELE()
{
cout<<endl<<"Enter elements:";
for(int i=1;i<=n;i++)
{
A[i]=random(1000);
// cin>>A[i];
}
}
void main()
{
int n;
Timer Tobj;
clrscr();
cout<<"Enter Total Number of element: ";
cin>>n;
HEAP obj(n);
obj.SET_ELE();
cout<<endl<<"\n Elements Before sorting are:\n";
obj.GET_ELE();
Tobj.start();
obj.HEAP_SORT();
Tobj.stop();
cout<<endl<<"\n Elements After sorting are:\n";
obj.GET_ELE();
cout<<endl<<"Time taken for execution="<<Tobj.time();
getch();
}
• Merge sort:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class LIST
{
int n,*A;
public:
LIST(int);
void SET_ELE();
void GET_ELE();
void MERGE(int,int,int);
void MERGESORT(int,int);
};
LIST::LIST(int par)
{
n=par;
A=new int[n+1];
}
void LIST::SET_ELE()
{
//cout<<endl<<"Enter the list elements is: \n";
for(int i=1;i<=n;i++)
{
//cin>>A[i];
A[i]=random(100);
}
}
void LIST::GET_ELE()
{
// cout<<endl<<"The list elements is: \n";
for(int i=1;i<=n;i++)
{
cout<<A[i]<<" ";
}
}
void LIST::MERGE(int low,int mid,int high)
{
int *B=new int[n+1];
int i=low;
int h=low;
int j=mid+1;
while(h<=mid && j<=high)
{
if(A[h]<A[j])
{
B[i]=A[h];
h=h+1;
}
else
{
B[i]=A[j];
j=j+1;
}
i=i+1;
}
if(h>mid)
{
for(int k=j;k<=high;k++)
{
B[i]=A[k];
i=i+1;
}
}
else
{
for(int k=h;k<=mid;k++)
{
B[i]=A[k];
i=i+1;
}
}
for(int k=low;k<=high;k++)
{
A[k]=B[k];
}
delete B;
}
void LIST::MERGESORT(int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;
MERGESORT(low,mid);
MERGESORT(mid+1,high);
MERGE(low,mid,high);
}
}
void main()
{
int n;
clrscr();
cout<<"Enter total no.of elements \n";
cin>>n;
LIST obj(n);
Timer Tobj;
obj.SET_ELE();
cout<<endl<<"\nElement Before sorting Element is: \n";
obj.GET_ELE();
Tobj.start();
obj.MERGESORT(1,n);
Tobj.stop();
cout<<endl<<"\nElement After sorting Element is: \n";
obj.GET_ELE();
cout<<endl<<"Time taken for execution="<<Tobj.time();
getch();
}
• Quick sort:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class LIST
{
int *A,n;
public:
LIST(int);
void SET_LIST();
void QUICK_SORT(int,int);
void PARTITION(int,int&);
void SHOW_LIST();
};
LIST::LIST(int para)
{
n=para;
A= new int[n+2];
}
void LIST::SET_LIST()
{
for(int i=1;i<=n;i++)
A[i]=random(5000);
A[i]=9999;
}
void LIST::QUICK_SORT(int p,int q)
{
if(p<q)
{
int j=q+1;
PARTITION(p,j);
QUICK_SORT(p,j-1);
QUICK_SORT(j+1,q);
}
}
void LIST::PARTITION(int m, int & p)
{
int v =A[m];
int i=m;
do
{
do
{
i=i+1;
}while(A[i]<v);
do
{
p=p-1;
}while(A[p]>v);
if(i<p)
{
int temp=A[i];A[i]=A[p];A[p]=temp;
}
else
break;
}while(1);
A[m]=A[p];
A[p]=v;
}
void LIST::SHOW_LIST()
{
//cout<<endl;
for(int i=1;i<=n;i++)
cout<<A[i]<<" ";
}
void main()
{
clrscr();
int n;
Timer T;
cout<<endl<<"Enter no. of elemets ; ";
cin>>n;
LIST obj(n);
obj.SET_LIST();
cout<<endl<<"\nElements before sorting : \n";
obj.SHOW_LIST();
T.start();
obj.QUICK_SORT(1,n);
T.stop();
cout<<endl<<"\nElements after sorting : \n";
obj.SHOW_LIST();
cout<<endl<<"Time taken by the prog to sort : "<<T.time();
getch();
}
7. Write a program for matrix multiplication using Strassen's matrix multiplication.
#include<iostream.h>
#include<conio.h>
class SET
{
int A[3][3],B[3][3],C[3][3];
public:
void READ_MATRIX();
void STRESSEN();
void SHOW_MATRIX();
};
void SET::READ_MATRIX()
{
cout<<endl<<"Enter elements of first matrix A:\n";
for(int i=1;i<=2;i++)
for(int j=1;j<=2;j++)
cin>>A[i][j];
cout<<endl<<"Enter elements of second matrix B:\n";
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
cin>>B[i][j];
}
void SET::STRESSEN()
{
int p,q,r,s,t,u,v;
p=(A[1][1] + A[2][2]) * (B[1][1] + B[2][2]);
q=(A[2][1] + A[2][2]) * B[1][1];
r=A[1][1] * (B[1][2] - B[2][2]);
s=A[2][2] * (B[2][1] - B[1][1]);
t=(A[1][1] + A[1][2]) * B[2][2];
u=(A[2][1] - A[1][1]) * (B[1][1] + B[1][2]);
v=(B[1][2] - A[2][2]) * (B[2][1] + B[2][2]);
C[1][1] = p + s - t + v;
C[1][2] = r + t;
C[2][1] = q + s;
C[2][2] = p + r - q + u;
}
void SET::SHOW_MATRIX()
{
for(int i=1;i<=2;i++)
{
cout<<endl;
for(int j=1;j<=2;j++)
cout<<A[i][j]<<" ";
cout<<" ";
for(j=1;j<=2;j++)
cout<<B[i][j]<<" ";
cout<<" ";
for(j=1;j<=2;j++)
cout<<C[i][j]<<" ";
}
}
void main()
{
clrscr();
SET obj;
obj.READ_MATRIX();
obj.STRESSEN();
obj.SHOW_MATRIX();
getch();
}
8.1 Write a program to find solution of Knapsack instant. Greedy method(Fractional)
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class GREEDY
{
int n;
float P[20],W[20],X[20],M,max_profit;
public:
GREEDY(int);
void READ_LIST();
void SHOW_LIST();
void GREEDY_KNAPSACK();
void SORT_OBJECTS();
};
GREEDY::GREEDY(int para)
{
n=para;
max_profit=0;
}
void GREEDY::READ_LIST()
{
cout<<endl<<"Enter weights of objects : \n";
for(int i=1;i<=n;i++)
cin>>W[i];
cout<<endl<<"Enter profit/ values of objects : \n";
for(i=1;i<=n;i++)
cin>>P[i];
cout<<endl<<"Enter max capacity of knapsack : ";
cin>>M;
}
void GREEDY::SORT_OBJECTS()
{
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n-i;j++)
{
if(P[j]/W[j] < P[j+1]/W[j+1] )
{
float temp=P[j];
P[j]=P[j+1];
P[j+1]=temp;
temp=W[j];
W[j]=W[j+1];
W[j+1]=temp;
}
}
}
}
void GREEDY::GREEDY_KNAPSACK()
{
// int X;
float cu;
SORT_OBJECTS();
cout<<endl<<"Objects after sorting:\n ";
for(int i=1;i<=n;i++)
cout<P[i]<<" ";
cout<<endl;
for(i=1;i<=n;i++)
cout<<W[i]<<" ";
cout<<endl;
for(i=1;i<=n;i++)
cout<<P[i]/W[i]<" ";
cu=M;
for(i=1;i<=n;i++)
X[i]=0;
for(i=1;i<=n;i++)
{
if(W[i]<=cu)
{
X[i]=1.0;
cu=cu-W[i];
}
else
break;
}
if(i<=n)
{
X[i]=cu/W[i];
}
}
void GREEDY::SHOW_LIST()
{
int i,k;
cout<<endl<<"\n Solution vector is : \n";
for(i=1;i<=n;i++)
{
cout<<X[i]<<" ";
max_profit=max_profit+ P[i]*X[i];
}
cout<<endl<<"\nTotal profit earned is =\n"<<max_profit;
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of objects ; ";
cin>>n;
GREEDY obj(n);
obj.READ_LIST();
//obj.SORT_OBJECTS();
obj.GREEDY_KNAPSACK();
obj.SHOW_LIST();
getch();
}
8.2 Write a program to find solution of Knapsack instant Knapsack (1/0):
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
class KNAPSACK
{
int n,X[10]; //B(n x M )
float P[10],W[10],M,B[10][20],max_profit;
public:
KNAPSACK(int);
void GET_DATA();
void KNAPSACK_DP();
void SHOW_SOL();
float MAX(float,float);
};
KNAPSACK::KNAPSACK(int par)
{
n=par;
for(int i=1;i<=n;i++)
X[i]=0;
max_profit=0;
}
void KNAPSACK::GET_DATA()
{
cout<<endl<<"Enter weights of objects : ";
for(int i=1;i<=n;i++)
cin>>W[i];
cout<<endl<<"Enter profit / value of objects : ";
for(i=1;i<=n;i++)
cin>>P[i];
cout<<endl<<"Enter Max capacity of Knapsack : ";
cin>>M;
}
void KNAPSACK::KNAPSACK_DP()
{
//first row zero
for(int i=1;i<=M;i++)
B[0][i]=0;
//first column zero
for(i=1;i<=n;i++)
B[i][0]=0;
for(i=1;i<=n;i++)
for(int cu=1;cu<=M;cu++)
if(W[i]<=cu)
// MaxOf(profdueto new or old profit)
B[i][cu]=MAX(P[i]+B[i-1][cu-W[i]] , B[i-1][cu]);
else
B[i][cu]=B[i-1][cu];
}
float KNAPSACK::MAX(float a, float b)
{
if(a>b)
return a;
else
return b;
}
void KNAPSACK::SHOW_SOL()
{
int i,k;
cout<<endl;
for(i=1;i<=n;i++)
{
cout<<endl;
for(int cu=1;cu<=M;cu++)
cout<<B[i][cu]<<" ";
}
i=n;
k=M;
while(i>0 && k>0)
{
if(B[i][k]!=B[i-1][k])
{
X[i]=1;
k=k-W[i];
}
i=i-1;
}
cout<<endl<<"Solution Vector is \n";
for(i=1;i<=n;i++)
{
cout<<X[i]<<" ";
max_profit=max_profit + P[i] * X[i];
}
cout<<endl<<"\nMax profit gained = \n"<<max_profit;
}
void main()
{
int n;
clrscr();
cout<<endl<<"Enter no of objects : ";
cin>>n;
KNAPSACK obj(n);
obj.GET_DATA();
obj.KNAPSACK_DP();
obj.SHOW_SOL();
getch();
}
9. Write a program to find shortest path using single source shortest path.
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<timer.h>
int COST[10][10]={
{0,0,0,0,0,0,0},
{0, 999,50,10,999,45,999},
{0, 999,999,15,999,10,999},
{0, 20,999,999,15,999,999},
{0, 999,20,999,999,35,999},
{0, 999,999,999,30,999,999},
{0, 999,999,999,3,999,999}
};
class GRAPH
{
int n,v,DIST[10];
//int COST[10][10];
public:
GRAPH(int);
void READ_GRAPH();
void SSSP();
void SHOW_GRAPH();
int MIN(int,int);
};
GRAPH::GRAPH(int para)
{
n=para;
}
void GRAPH::READ_GRAPH()
{
/*cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>COST[i][j];
*/
cout<<endl<<"Enter source vertex : ";
cin>>v;
}
void GRAPH::SSSP()
{
int u,w,S[10];
for(int i=1;i<=n;i++)
{
S[i]=0;
DIST[i]=COST[v][i];
}
DIST[v]=0;
S[v]=1;
for(int num=2;num<=n-1;num++)
{
// find u such that .....
int min=999;
for(w=1;w<=n;w++)
{
if(S[w]==0 && DIST[w]<min)
{
min=DIST[w];
u=w;
}
}
S[u]=1;
//update DIST[]
for(w=1;w<=n;w++)
{
if(S[w]==0)
DIST[w]=MIN( DIST[w], (DIST[u]+COST[u][w]) );
}
}
}
int GRAPH::MIN(int x,int y)
{
if(x<y) return x; else return y;
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"\nCOST Adj matrix is :\n ";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<COST[i][j]<<" ";
}
cout<<endl<<"Source\tDesti\t Distance";
for(i=1;i<=n;i++)
cout<<endl<<v<<"\t"<<i<<"\t"<<DIST[i];
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj(n);
obj.READ_GRAPH();
obj.SSSP();
obj.SHOW_GRAPH();
getch();
}
10. Write a program to find Minimum-Cost Spanning Trees (Prim's & Kruskal's Algorithm).
PRIM’S:
#include<iostream.h>
#include<conio.h>
int COST[10][10]={
{0,0,0,0,0,0,0},
{0, 999,55 ,999, 50,999,999},
{0, 55,999,15 , 40, 20,999},
{0, 999, 15,999,999, 10, 30},
{0, 50, 40,999,999, 45,999},
{0, 999, 20, 10, 45,999, 25},
{0, 999,999, 30,999, 25,999}
};
class GRAPH
{
int n;
//int COST[10][10];
int T[10][2],min_cost;
public:
GRAPH(int);
void READ_GRAPH();
void SHOW_GRAPH();
void PRIMS();
void SHOW_TREE();
};
GRAPH::GRAPH(int para)
{
n=para;
}
void GRAPH::READ_GRAPH()
{
cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>COST[i][j];
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"Cost adj matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<COST[i][j]<<" ";
}
}
void GRAPH::PRIMS()
{
int NEAR[10],i,j,k,l,min;
//find min cost edge
min=999;
for(i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(COST[i][j]<min)
{
min=COST[i][j];
k=i;l=j;
}
}
}
min_cost=COST[k][l];
// add first edge in tree
T[1][1]=k; T[1][2]=l;
// initialize NEAR[]
cout<<endl;
for(i=1;i<=n;i++)
{
if( COST[i][l]<COST[i][k] )
NEAR[i]=l;
else
NEAR[i]=k;
}
NEAR[k]=0; NEAR[l]=0;
// find remaining n-2 edges for sp.tree
for(i=2;i<=n-1;i++)
{
// find j such that COST[j][NEAR[j]] is min
min=999;
for(int w=1;w<=n;w++)
{
if(NEAR[w]!=0 && COST[w][NEAR[w]]<min)
{
min=COST[w][NEAR[w]];
j=w;
}
}
// cout<<endl<<"j="<<j;
min_cost=min_cost+COST[j][NEAR[j]];
//add next edge to tree
T[i][1]=j;
T[i][2]=NEAR[j];
NEAR[j]=0;
// update NEAR[]
for(w=1;w<=n;w++)
{
if( NEAR[w] !=0 && COST[w][j] < COST[w][NEAR[w]] )
NEAR[w]=j;
}
}
if(min_cost < 999)
SHOW_TREE();
else
cout<<endl<<"No spanning Tree !";
}
void GRAPH::SHOW_TREE()
{
cout<<endl<<"Min Cost spannig tree is : \n";
for(int i=1;i<n;i++)
cout<<endl<<T[i][1]<<" "<<T[i][2];
cout<<endl<<"Min Cost is : "<<min_cost;
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj(n);
obj.SHOW_GRAPH();
obj.PRIMS();
getch();
}
KRUSKAL:
#include<iostream.h>
#include<conio.h>
int COST[10][10]={
{0,0,0,0,0,0,0},
{0, 999,55 ,999, 50,999,999},
{0, 55,999,15 , 40, 20,999},
{0, 999, 15,999,999, 10, 30},
{0, 50, 40,999,999, 45,999},
{0, 999, 20, 10, 45,999, 25},
{0, 999,999, 30,999, 25,999}
};
class GRAPH
{
int n,e;
//int COST[10][10];
int T[10][2],min_cost,PAR[10];
int EDGE[20][4];
public:
GRAPH(int);
void READ_GRAPH();
void SHOW_GRAPH();
void KRUSKAL();
void UNION(int,int);
int FIND(int);
void SHOW_TREE();
void CREATE_EDGE_LIST();
void SORT_EDGE_LIST();
};
GRAPH::GRAPH(int para)
{
n=para;
for(int i=1;i<=n;i++)
PAR[i] = -1;
}
void GRAPH::READ_GRAPH()
{
cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>COST[i][j];
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"Cost adj matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<COST[i][j]<<" ";
}
}
void GRAPH::UNION(int i,int j)
{
PAR[i]=j;
}
int GRAPH::FIND(int i)
{
int j=i;
while(PAR[j] > -1)
j=PAR[j];
return j;
}
void GRAPH::CREATE_EDGE_LIST()
{
//find min cost edge
e=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(COST[i][j] < 999)
{
e=e+1;
EDGE[e][1]=i;
EDGE[e][2]=j;
EDGE[e][3]=COST[i][j];
}
}
}
SORT_EDGE_LIST();
}
void GRAPH::SORT_EDGE_LIST()
{
for(int i=1;i<e;i++)
for(int j=1;j<=e-i;j++)
if(EDGE[j][3] > EDGE[j+1][3] )
{
int temp= EDGE[j][1];
EDGE[j][1]=EDGE[j+1][1];
EDGE[j+1][1]=temp;
temp= EDGE[j][2];
EDGE[j][2]=EDGE[j+1][2];
EDGE[j+1][2]=temp;
temp= EDGE[j][3];
EDGE[j][3]=EDGE[j+1][3];
EDGE[j+1][3]=temp;
}
cout<<endl<<"***********************************************\n";
for(i=1;i<=e;i++)
cout<<endl<<EDGE[i][1]<<" "<<EDGE[i][2]<<" "<<EDGE[i][3];
}
void GRAPH::KRUSKAL()
{
int u,v,i=0,j,k;
min_cost=0;
int ptr=0;
while(i<n-1 && ptr<e)
{
ptr=ptr+1;
u=EDGE[ptr][1];
v=EDGE[ptr][2];
j=FIND(u);
k=FIND(v);
if(j!=k)
{
// add first edge in tree
T[i][1]=u;
T[i][2]=v;
UNION(j,k);
min_cost=min_cost + COST[u][v];
}
}
if(min_cost < 999)
SHOW_TREE();
else
cout<<endl<<"No spanning Tree !";
}
void GRAPH::SHOW_TREE()
{
cout<<endl<<"Min Cost spannig tree is : \n";
for(int i=1;i<n;i++)
cout<<endl<<T[i][1]<<" "<<T[i][2];
cout<<endl<<"Min Cost is : "<<min_cost;
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj(n);
//obj.READ_GRAPH();
obj.SHOW_GRAPH();
obj.CREATE_EDGE_LIST();
obj.KRUSKAL();
getch();
}
11. Write a program to find shortest path using all pair path.
#include<iostream.h>
#include<conio.h>
int COST[10][10]={
{0, 0, 0, 0, 0, 0},
{0, 999,999,999, 7, 6},
{0, 3,999, 3,999, 8},
{0, 4, 9,999,999, 2},
{0, 999,999, 1,999,999},
{0, 999,999,999, 5,999}
};
class GRAPH
{
int n,A[10][10];
//int COST[10][10];
public:
GRAPH(int);
void READ_GRAPH();
void SHOW_GRAPH();
void ALL_PAIRS();
void SHOW_PATH_DIST();
};
GRAPH::GRAPH(int para)
{
n=para;
}
void GRAPH::READ_GRAPH()
{
cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>COST[i][j];
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"Cost adj matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<COST[i][j]<<" ";
}
}
void GRAPH::SHOW_PATH_DIST()
{
cout<<endl<<"\nAll pair shortest path distance matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<A[i][j]<<" ";
}
}
void GRAPH::ALL_PAIRS()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
A[i][j]=COST[i][j];
for(int k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if( A[i][k]+A[k][j] < A[i][j] )
A[i][j]=A[i][k]+A[k][j];
}
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj(n);
//obj.READ_GRAPH();
obj.SHOW_GRAPH();
obj.ALL_PAIRS();
obj.SHOW_PATH_DIST();
getch();
}
12. Write a program to find longest common subsequence.
#include<iostream.h>
#include<conio.h>
#include<string.h>
class STRING
{
char X[30],Y[30],Z[30],B[30][30];
int m,n,C[30][30];
public:
STRING();
void GET_STRING();
void SET_STRING();
void LCS_LENGTH();
void LCS_PRINT(int,int);
};
STRING::STRING()
{
}
void STRING::GET_STRING()
{
cout<<endl<<"Entered strings are : \n";
cout<<X<<endl;
cout<<Y;
}
void STRING::SET_STRING()
{
cout<<endl<<"Enter a string : ";
cin>>X;
cout<<endl<<"Enter another string : ";
cin>>Y;
}
void STRING::LCS_LENGTH()
{
m=strlen(X);
n=strlen(Y);
for(int i=0;i<=m;i++) //first col zero
C[i][0]=0;
for(int j=0;j<=n;j++) //first row zero
C[0][j]=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(X[i-1]==Y[j-1])
{
C[i][j] = C[i-1][j-1]+1;
B[i][j] = '\\';
}
else
{
if(C[i-1][j]>=C[i][j-1])
{
C[i][j] = C[i-1][j];
B[i][j] = '|';
}
else
{
C[i][j] = C[i][j-1];
B[i][j] = '-';
}
}
}
for(i=1;i<=m;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<C[i][j]<<" ";
}
cout<<endl;
for(i=1;i<=m;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<B[i][j]<<" ";
}
cout<<endl;
LCS_PRINT(m,n);
}
void STRING::LCS_PRINT(int r,int c)
{
if(r>0 && c>0)
{
if(B[r][c]=='\\')
{
LCS_PRINT(r-1,c-1);
cout<<X[r-1]<<" ";
}
else
if(B[r][c]=='|')
LCS_PRINT(r-1,c);
else
LCS_PRINT(r,c-1);
}
}
void main()
{
clrscr();
STRING obj;
obj.SET_STRING();
//obj.GET_STRING();
obj.LCS_LENGTH();
getch();
}
13. Write a program to implement breadth first and depth first search.
#include<iostream.h>
#include<conio.h>
int A[10][10]={
{0, 0,0,0,0,0,0,0,0},
{0, 0,1,0,1,1,0,0,0},
{0, 1,0,0,0,1,1,1,0},
{0, 0,0,0,0,1,0,0,1},
{0, 1,0,0,0,0,0,0,1},
{0, 1,1,1,0,0,1,0,0},
{0, 0,1,0,0,1,0,0,0},
{0, 0,1,0,0,0,0,0,0},
{0, 0,0,1,1,0,0,0,0}
};
class GRAPH
{
int n;
int T[10][2],min_cost;
public:
GRAPH(int);
void READ_GRAPH();
void SHOW_GRAPH();
void BFS(int);
void DFS(int);
};
GRAPH::GRAPH(int para)
{
n=para;
}
void GRAPH::READ_GRAPH()
{
cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>A[i][j];
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"Cost adj matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<A[i][j]<<" ";
}
}
void GRAPH::BFS(int v)
{
int VISITED[10],u;
int Q[10],front,rear;
for(int i=1;i<=n;i++)
VISITED[i]=0;
VISITED[v]=1;
u=v;
front=rear=0;
do
{
cout<<u<<" ";
for(int w=1;w<=n;w++)
{
if(A[u][w]==1 && VISITED[w]==0)
{
if(front==0)
front=1;
rear = rear+1;
Q[rear] = w;
VISITED[w]=1;
}
}
if(front==0)
return;
else // del from Q and store in u
{
u=Q[front];
if(front==rear)
front=rear=0;
else
front =front+1;
}
}while(1);
}
void GRAPH::DFS(int v)
{
int VISITED[10],u;
int STK[10],top;
for(int i=1;i<=n;i++)
VISITED[i]=0;
VISITED[v]=1;
u=v;
top=0;
do
{
cout<<u<<" ";
for(int w=1;w<=n;w++)
{
if(A[u][w]==1 && VISITED[w]==0)
{
top = top+1;
STK[top] = w;
VISITED[w]=1;
}
}
if(top==0)
return;
else // del from Q and store in u
{
u=STK[top];
top = top-1;
}
}while(1);
}
void main()
{
clrscr();
int n,v;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj(n);
//obj.READ_GRAPH();
obj.SHOW_GRAPH();
cout<<endl<<"Enter source vertex : ";
cin>>v;
cout<<endl<<”Breadth First Search Graph sequence=”;
//cout<<endl;
obj.BFS(v);
cout<<endl;
cout<<endl<<”Depth First Search Graph sequence=”;
obj.DFS(v);
getch();
}
14. Write a program to implement breadth first and depth first traversal.
#include<iostream.h>
#include<conio.h>
int A[10][10]={
{0, 0,0,0,0,0,0,0,0},
{0, 0,1,0,1,1,0,0,0},
{0, 1,0,0,0,1,1,1,0},
{0, 0,0,0,0,1,0,0,1},
{0, 1,0,0,0,0,0,0,1},
{0, 1,1,1,0,0,1,0,0},
{0, 0,1,0,0,1,0,0,0},
{0, 0,1,0,0,0,0,0,0},
{0, 0,0,1,1,0,0,0,0}
};
class GRAPH
{
int n;
int T[10][2],min_cost,VISITED[10];
public:
GRAPH(int);
void READ_GRAPH();
void SHOW_GRAPH();
void BFS(int);
void DFS(int);
void BFT();
void DFT();
};
GRAPH::GRAPH(int para)
{
n=para;
for(int i=1;i<=n;i++)
VISITED[i]=0;
}
void GRAPH::READ_GRAPH()
{
cout<<endl<<"Enter cost adj matrix : \n";
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>A[i][j];
}
void GRAPH::SHOW_GRAPH()
{
cout<<endl<<"Cost adj matrix is : \n";
for(int i=1;i<=n;i++)
{
cout<<endl;
for(int j=1;j<=n;j++)
cout<<A[i][j]<<" ";
}
}
void GRAPH::BFS(int v)
{
int VISITED[10],u;
int Q[10],front,rear;
VISITED[v]=1;
u=v;
front=rear=0;
do
{
cout<<u<<" ";
for(int w=1;w<=n;w++)
{
if(A[u][w]==1 && VISITED[w]==0)
{
if(front==0)
front=1;
rear = rear+1;
Q[rear] = w;
VISITED[w]=1;
}
}
if(front==0)
return;
else // del from Q and store in u
{
u=Q[front];
if(front==rear)
front=rear=0;
else
front =front+1;
}
}while(1);
}
void GRAPH::DFS(int v)
{
int VISITED[10],u;
int STK[10],top;
VISITED[v]=1;
u=v;
top=0;
do
{
cout<<u<<" ";
for(int w=1;w<=n;w++)
{
if(A[u][w]==1 && VISITED[w]==0)
{
top = top+1;
STK[top] = w;
VISITED[w]=1;
}
}
if(top==0)
return;
else // del from Q and store in u
{
u=STK[top];
top = top-1;
}
}while(1);
}
void GRAPH::BFT()
{
for(int i=1;i<=n;i++)
{
if(VISITED[i]==0)
BFS(i);
}
}
void GRAPH::DFT()
{
for(int i=1;i<=n;i++)
{
if(VISITED[i]==0)
DFS(i);
}
}
void main()
{
clrscr();
int n,v;
cout<<endl<<"Enter no of vertices : ";
cin>>n;
GRAPH obj1(n);
GRAPH obj2(n);
//obj.READ_GRAPH();
obj.SHOW_GRAPH();
//cout<<endl<<"Enter source vertex : ";
//cin>>v;
cout<<endl<<”Breadth First Traversal Graph sequence=”;
//cout<<endl;
obj.BFT(v);
cout<<endl;
cout<<endl<<”Depth First Traversal Graph sequence=”;
obj.DFT(v);
getch();
}
15. Write a program to find all solutions for 8-queen problem using backtracking
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
class QUEEN
{
int n,X[10];
int count;
public:
QUEEN(int);
void N_QUEEN();
int PLACE(int);
void SHOW();
};
QUEEN::QUEEN(int para)
{
n=para;
count=0;
}
void QUEEN::N_QUEEN()
{
int k=1;
X[k]=0;
while(k>0)
{
X[k]=X[k]+1;
while(X[k]<=n && ! PLACE(k))
{
X[k]=X[k]+1;
}
if(X[k]<=n)
{
if(k==n)
{
count++;
SHOW();
}
else
{
k=k+1; X[k]=0;
}
}
else // backtrack
{
k=k-1;
}
}
}
int QUEEN::PLACE(int k)
{
for(int i=1;i<=k-1;i++)
if(X[i]==X[k] || abs(X[i]-X[k])==abs(i-k))
return 0;
return 1;
}
void QUEEN:: SHOW()
{
cout<<endl<<"\nN Queen Solution no "<<count<<" \n";
for(int i=1;i<=n;i++)
cout<<X[i]<<" ";
/*
for(int i=1;i<=n;i++)
{
cout<<endl<<"--------------------"<<endl;
for(int j=1;j<=n;j++)
if(X[i]==j)
cout<<"| Q"<<i;
else
cout<<"| ";
}
cout<<endl<<"--------------------"<<endl;
*/
}
//////////////////////////////////////////////
void main()
{
clrscr();
int n;
cout<<endl<<"Enter no of queens : ";
cin>>n;
QUEEN obj(n);
obj.N_QUEEN();
getch();
}
Editor is loading...
Leave a Comment