0% found this document useful (0 votes)
157 views

DS PGM Using CPP

This C++ program implements Prim's algorithm to find the minimum spanning tree of a graph. It takes the graph input from the user in the form of cost matrix. It then applies Prim's algorithm to generate the minimum cost spanning tree. The output prints the edges of the minimum spanning tree.

Uploaded by

anand5703
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
157 views

DS PGM Using CPP

This C++ program implements Prim's algorithm to find the minimum spanning tree of a graph. It takes the graph input from the user in the form of cost matrix. It then applies Prim's algorithm to generate the minimum cost spanning tree. The output prints the edges of the minimum spanning tree.

Uploaded by

anand5703
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 18

## This project is for Travelling Salesman problem using dynamic programming for in C++ Programming #include #include #include

#define max 100 #define infinity 999 int tspdp(int c[][max],int tour[],int star,int n); int main() { int n; int i,j,c[max][max]; int tour[max],cost; cout<<"Travelling Salesman Problem Using Dynamic Programming\n"; cout<<"\nEnter number of cities to traverse"; cin>>n; cout<<"Enter cost matrix\n"<<endl; for(i=0;i<n;i++) for(j=0;j<n;j++) { cin>>c[i][j]; if(c[i][j]==0) c[i][j]=999; } for(i=0;i<n;i++) tour[i]=i; cost=tspdp(c,tour,0,n); cout<<"Minimum Cost:"<<cost<<endl; cout<<"Tour:\n"; for(i=0;i<n;i++) cout<<tour[i]+1<<"-"; cout<<"1\n"; getch(); return 0; } int tspdp(int c[][max],int tour[],int start,int n) { int i,j,temp[max],mintour[max]; int mincost,ccost; if(start==n-2) return c[tour[n-2]][tour[n-1]]+c[tour[n-1]][0]; mincost=infinity; for(i=start+1;i<n;i++) { for(j=0;j<n;j++) temp[j]=tour[j]; temp[start+1]=tour[i]; temp[i]=tour[start+1];

if(c[tour[start]][tour[i]]+(ccost=tspdp(c,temp,start+1,n))<mincost) { mincost=c[tour[start]][tour[i]]+cost; for(k=0;k<n;k++) mintour[k]=temp[k]; } } for(i=o;i<n;i++) tour[i]=mintour[i]; return mincost; } </n;i++) </n;k++) </mincost) </n;j++) </n;i++) </tour[i]+1<<"-"; </n;i++) </cost<<endl; </n;i++) </n;j++) </n;i++) </endl;

TRAVELING SALESMAN USING BRANCH AND BOUND TECHNIQUE

#include<iostream.h> #include<conio.h> int main() { int i,j,k,n,min,g[20][20],c[20][20],s,s1[20][1],s2,lb; clrscr(); cout<<"\n TRAVELLING SALESMAN PROBLEM"; cout<<"\n Input number of cities:"; cin>>n; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { c[i][j]=0; }} for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) continue; else{ cout<<"input"<<i<<"to"<<j<<"cost:"; cin>>c[i][j]; } } } for(i=2;i<=n;i++) { g[i][0]=c[i][1]; } for(i=2;i<=n;i++) { for(j=2;j<=n;j++) { if(i!=j) g[i][j]=c[i][j]+g[j][0]; } } for(i=2;i<=n;i++) { for(j=2;j<=n;j++) { if(i!=j) break; } } for(k=2;k<=n;k++){

if(i!=k && j!=k){ if((c[i][j]+g[i][k])<(c[i][k]+g[k][j])) { g[i][j]=c[i][j]+g[j][k]; s1[i][j]=j; } else { g[i][1]=c[i][k]+g[k][j]; s1[i][1]=k; } } } min=c[1][2]+g[2][1]; s=2; for(i=3;i<n;i++) { if((c[i][i]+g[i][i])<min) { min=c[1][i]+g[i][1]; s=i; } } int y=g[i][1]+g[i][j]+g[i][i]; lb=(y/2); cout<<"Edge Matrix"; for(i=1;i<=n;i++) { cout<<"\n"; for(j=1;j<=n;j++) { cout<<"\t"<<c[i][j]; } } cout<<"\n min"<<min; cout<<"\n\b"<<lb; for(i=2;i<=n;i++) { if(s!=i && s1[s][1]!=i) { s2=i; } } cout<<"\n"<<1<<"-->"<<s<<"-->"<<s1[s][1]<<"-->"<<s2<<"-->"<<1<<"\n"; getch(); return (0); }

OUTPUT: TRAVELING SALESMAN PROBLEM Input number of cities: 3 input1to2cost:20 input1to3cost:12 input2to1cost:33 input2to3cost:23 input3to1cost:34 input3to2cost:12 Edge Matrix 0 20 12 33 0 23 34 12 0 min21 3915 1-->2-->3-->1

KNAPSACK PROBLEM USING BACKTRACKING METHOD


#include<iostream.h> #include<conio.h> #include<math.h> float p[10]={0},w[10]={0},y[10]={0},x[10]={0}; int i,n,max,k,cp=0,cw=0,fp,fw; class back { public: void get(); void knapsack(int,int,int); int bound(int,int,int); }; void back::get() { int i; cout<<"\nEnter the Capacity:"; cin>>max; cout<<"\n\nEnter the no.of Object:"; cin>>n; for(i=1;i<=n;i++) { cout<<"Enter the weight of the object{w}"<<i,i; cout<<":"; cin>>w[i]; cout<<"Enter the profit of the object{p}"<<i,i; cout<<":"; cin>>p[i]; } } void back::knapsack(int k,int cp,int cw) { int j; if(cw+w[k],+max) { y[k]=1; if(k<n) knapsack(k+1,cp+p[k],cw+w[k]); if((cp+p[k]>fp)&&(k==n)) { fp=cp+p[k]; fw=cw+w[k]; for(j=1;j<=n;++j) x[j]=y[j]; } } if(bound(cp,cw,k)>=fp) { y[k]=0; if(k<n) knapsack(k+1,cp,cw);

if((cp>fp)&&(k==n)) { fp=cp; fw=cw; for(j=1;j<=n;j++) x[j]=y[j]; } } } int back::bound(int cp,int cw,int k) { int i,b,c; b=cp; c=cw; for(i=k+1;i<=n;i++) { c=c+w[i]; if(c<max) b=b+p[i]; else { return(b+(1-(c-max)/w[i])*p[i]); } } return b; } void main() { clrscr(); cout<<"\n\n\tKnapsack Using Backtracking\n"; back obj; obj.get(); k=1; cp=0; cw=0; obj.knapsack(k,cp,cw); cout<<"\nSelected Object are:\n"; for(i=1;i<=n;i++) { if(x[i]==1) cout<<"\nObject :"<<" "<<i; } cout<<"\nMax Profit of the knapsack is:"<<fp; cout<<"\nTotal weight of the knapsack is:"<<fw; getch(); }

OUTPUT: Knapsack Using Backtracking Enter the Capacity:20 Enter the no.of Object:3 Enter the weight of the object{w}1:20 Enter the profit of the object{p}1:34 Enter the weight of the object{w}2:25 Enter the profit of the object{p}2:39 Enter the weight of the object{w}3:13 Enter the profit of the object{p}3:44 Selected Object are: Object : 1 Object : 2 Object : 3 Max Profit of the knapsack is:117 Total weight of the knapsack is:58

KNAPSACK PROBLEM

KNAPSACK PROBLEM USING GREEDY METHOD


#include<iostream.h> #include<conio.h> int i,j,n,temp=0,index[20]={0}; float p[20]={0},w[20]={0},x[20]={0},max,capacity; void getdata() { cout<<"\nEnter the capacity of knapsack bag:"; cin>>max; cout<<"\nEnter the number of objects:"; cin>>n; for(i=0;i<n;i++) { cout<<"\nEnter the weight of objects {w[i]}"<<i+1,i+1; cout<<":"; cin>>w[i]; cout<<"\nEnter the profit of object{p[i]}"<<i+1,i+1; cout<<":"; cin>>p[i]; } } void knapsack(float p[],float w[],float x[],float max,int n) { for(i=0;i<n;index[temp]=i,i++) for(temp=0,j=0;j<n;j++) if((i!=j)&&(p[i]/w[i]<(p[j]/w[j]))) temp++; capacity=max; for(i=0;i<n;i++) { if(w[index[i]]>capacity) break; x[index[i]]=1.0; capacity=capacity-w[index[i]]; } if(i<n) x[index[i]]=capacity/w[index[i]]; } void display() { float profit=0.0,max_cap=0.0; for(i=0;i<n;i++) profit=profit+x[i]*p[i]; for(i=0;i<n;i++) max_cap=max_cap+w[i]*x[i]; cout<<"\nThe optimal solution Becomes"; cout<<"\nObject\tWeight\tProfit\tX\t"; cout<<"\n\t\tI\tw[i]\tp[i]\tx[i]\n\n"; for(i=0;i<n;i++) cout<<"\n\t\t"<<w[i]<<"\t\t"<<p[i]<<"\t\t"<<x[i],i+1; cout<<"\n\nTotal Profit of Knapsack is:"<<profit;

cout<<"\n\nTotal Weight of Knapsack is:"<<max_cap; getch(); } void main() { clrscr(); cout<<"\nKnapsack Problem using Greedy Method:"; getdata(); knapsack(p,w,x,max,n); display(); getch(); } OUTPUT: Knapsack Problem using Greedy Method: Enter the capacity of knapsack bag:6 Enter the number of objects:5 Enter the weight of objects {w[i]}1:3 Enter the profit of object{p[i]}1:25 Enter the weight of objects{w[i]}2:2 Enter the profit of object{p[i]}2:20 Enter the weight of objects{w[i]}3:1 Enter the profit of object{p[i]}3:15. Enter the weight of objects {w[i]}4:4 Enter the profit of object{p[i]}4:40 Enter the weight of objects {w[i]}5:5 Enter the profit of object{p[i]}5:50 The optimal solution Becomes Object Weight Profit I w[i] p[i] 3 25 2 20 1 15 4 40 5 50 Total Profit of Knapsack is: 65 Total Weight of Knapsack is: 6 X x[i] 0 0 1 0 1

C++ programs for the implementation of Breadth First Search(BFS) for a given graph
#include<iostream> #include<conio.h> #include<stdlib.h> using namespace std; int cost[10][10],i,j,k,n,qu[10],front,rare,v,visit[10],visited[10]; main() { int m; cout <<"enterno of vertices"; cin >> n; cout <<"ente no of edges"; cin >> m; cout <<"\nEDGES \n"; for(k=1;k<=m;k++) { cin >>i>>j; cost[i][j]=1; } cout <<"enter initial vertex"; cin >>v; cout <<"Visitied vertices\n"; cout << v; visited[v]=1; k=1; while(k<n) { for(j=1;j<=n;j++) if(cost[v][j]!=0 && visited[j]!=1 && visit[j]!=1) { visit[j]=1; qu[rare++]=j; } v=qu[front++]; cout<<v << " "; k++; visit[v]=0; visited[v]=1; } } OUTPUT enter no of vertices 9 ente no of edges9 EDGES 12 23 15 14 47 78 89 26 57 enter initial vertex1 Visited vertices 12 4 5 3 6 7 8 9

C++ programs for the implementation of Depth-first search(DFS) for a given graph
#include<iostream> #include<conio.h> #include<stdlib.h> using namespace std; int cost[10][10],i,j,k,n,stk[10],top,v,visit[10],visited[10]; main() { int m; cout <<"enterno of vertices"; cin >> n; cout <<"ente no of edges"; cin >> m; cout <<"\nEDGES \n"; for(k=1;k<=m;k++) { cin >>i>>j; cost[i][j]=1; } cout <<"enter initial vertex"; cin >>v; cout <<"ORDER OF VISITED VERTICES"; cout << v <<" "; visited[v]=1; k=1; while(k<n) { for(j=n;j>=1;j--) if(cost[v][j]!=0 && visited[j]!=1 && visit[j]!=1) { visit[j]=1; stk[top]=j; top++; } v=stk[--top]; cout<<v << " "; k++; visit[v]=0; visited[v]=1; } } OUTPUT enterno of vertices9 ente no of edges9 EDGES 12 23 26 15 14 47 57 78 89 enter initial vertex1 ORDER OF VISITED VERTICES1 2 3 6 4 7 8 9 5

C++ program for creation and traversal of a Binary Tree


#include<iostream.h> #include<conio.h> #include<process.h> struct tree_node { tree_node *left; tree_node *right; int data; } ; class bst { tree_node *root; public: bst() { root=NULL; } int isempty() { return(root==NULL); } void insert(int item); void inordertrav(); void inorder(tree_node *); void postordertrav(); void postorder(tree_node *); void preordertrav(); void preorder(tree_node *); }; void bst::insert(int item) { tree_node *p=new tree_node; tree_node *parent; p->data=item; p->left=NULL; p->right=NULL; parent=NULL; if(isempty()) root=p; else { tree_node *ptr; ptr=root; while(ptr!=NULL) { parent=ptr; if(item>ptr->data) ptr=ptr->right; else ptr=ptr->left; } if(item<parent->data) parent->left=p; else parent->right=p; }

} void bst::inordertrav() { inorder(root); } void bst::inorder(tree_node *ptr) { if(ptr!=NULL) { inorder(ptr->left); cout<<" "<<ptr->data<<" "; inorder(ptr->right); } } void bst::postordertrav() { postorder(root); } void bst::postorder(tree_node *ptr) { if(ptr!=NULL) { postorder(ptr->left); postorder(ptr->right); cout<<" "<<ptr->data<<" "; } } void bst::preordertrav() { preorder(root); } void bst::preorder(tree_node *ptr) { if(ptr!=NULL) { cout<<" "<<ptr->data<<" "; preorder(ptr->left); preorder(ptr->right); } } void main() { bst b; b.insert(52); b.insert(25); b.insert(50); b.insert(15); b.insert(40); b.insert(45); b.insert(20); cout<<"inorder"<<endl; b.inordertrav(); cout<<endl<<"postorder"<<endl; b.postordertrav(); cout<<endl<<"preorder"<<endl; b.preordertrav(); getch(); }

C++ programs to implement the Prims algorithm to generate a minimum cost spanning tree
#include<iostream> #include<conio.h> #include<stdlib.h> using namespace std; int cost[10][10],i,j,k,n,stk[10],top,v,visit[10],visited[10],u; main() {

int m,c; cout <<"enterno of vertices"; cin >> n; cout <<"ente no of edges"; cin >> m; cout <<"\nEDGES Cost\n"; for(k=1;k<=m;k++) { cin >>i>>j>>c; cost[i][j]=c; } for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(cost[i][j]==0) cost[i][j]=31999; cout <<"ORDER OF VISITED VERTICES"; k=1; while(k<n) { m=31999; if(k==1) { for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(cost[i][j]<m) { m=cost[i][j]; u=i; } } else { for(j=n;j>=1;j--) if(cost[v][j]<m && visited[j]!=1 && visit[j]!=1) { visit[j]=1; stk[top]=j; top++; m=cost[v][j]; u=j; } } cost[v][u]=31999; v=u; cout<<v << " "; k++; visit[v]=0; visited[v]=1; }

OUTPUT enterno of vertices7 ente no of edges9 EDGES Cost 1 6 10 6 5 25 5 4 22 4 3 12 3 2 16 2 7 14 5 7 24 4 7 18 1 2 28 ORDER OF VISITED VERTICES1 6 5 4 3 2

C++ program that uses dynamic programming algorithm to solve the optimal binary search tree problem
#include<iostream> #include<conio.h> #include<stdio.h> using namespace std; #define MAX 10 int find(int i,int j); void print(int,int); int p[MAX],q[MAX],w[10][10],c[10][10],r[10][10],i,j,k,n,m; char idnt[7][10]; main() {

cout << "enter the no, of identifiers"; cin >>n; cout <<"enter identifiers"; for(i=1;i<=n;i++) gets(idnt[i]); cout <<"enter success propability for identifiers"; for(i=1;i<=n;i++) cin >>p[i]; cout << "enter failure propability for identifiers"; for(i=0;i<=n;i++) cin >> q[i]; for(i=0;i<=n;i++) { w[i][i]=q[i]; c[i][i]=r[i][i]=0; w[i][i+1]=q[i]+q[i+1]+p[i+1]; r[i][i+1]=i+1; c[i][i+1]=q[i]+q[i+1]+p[i+1]; } w[n][n]=q[n]; r[n][n]=c[n][n]=0; for(m=2;m<=n;m++) { for(i=0;i<=n-m;i++) { j=i+m; w[i][j]=w[i][j-1]+p[j]+q[j]; k=find(i,j); r[i][j]=k; c[i][j]=w[i][j]+c[i][k-1]+c[k][j]; } } cout <<"\n"; print(0,n); }

int find(int i,int j) { int min=2000,m,l; for(m=i+1;m<=j;m++) if(c[i][m-1]+c[m][j]<min) { min=c[i][m-1]+c[m][j]; l=m; } return l; } void print(int i,int j) { if(i<j) puts(idnt[r[i][j]]);

else return; print(i,r[i][j]-1); print(r[i][j],j); } OUTPUT

enter the no, of identifiers4 enter identifiers do if int while enter success propability for identifiers3 3 1 1 enter failure propability for identifiers2 3 1 1 1 tree in preorder form if do int while

You might also like