ds pgm using cpp

21
## 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)

Upload: anand5703

Post on 28-Oct-2014

38 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DS Pgm Using Cpp

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

#include#include#include#define max 100#define infinity 999int 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];

Page 2: DS Pgm Using Cpp

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;

Page 3: DS Pgm Using Cpp

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++){

Page 4: DS Pgm Using Cpp

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);}

Page 5: DS Pgm Using Cpp

OUTPUT:

 TRAVELING SALESMAN PROBLEMInput number of cities: 3input1to2cost:20input1to3cost:12input2to1cost:33input2to3cost:23input3to1cost:34input3to2cost:12Edge Matrix        0       20      12        33      0       23        34      12      0 min2139151-->2-->3-->1

Page 6: DS Pgm Using Cpp

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);

Page 7: DS Pgm Using Cpp

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();}

Page 8: DS Pgm Using Cpp

OUTPUT:                                       Knapsack Using Backtracking

Enter the Capacity:20

Enter the no.of Object:3Enter the weight of the object{w}1:20Enter the profit of the object{p}1:34Enter the weight of the object{w}2:25Enter the profit of the object{p}2:39Enter the weight of the object{w}3:13Enter the profit of the object{p}3:44

Selected Object are:

Object : 1Object : 2Object : 3Max Profit of the knapsack is:117Total weight of the knapsack is:58  

KNAPSACK PROBLEM

Page 9: DS Pgm Using Cpp

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;

Page 10: DS Pgm Using Cpp

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      X                I            w[i]       p[i]       x[i]                               3           25         0                               2           20         0                               1           15         1                               4           40         0                               5           50         1

Total Profit of Knapsack is: 65

Total Weight of Knapsack is: 6

Page 11: DS Pgm Using Cpp

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;}}OUTPUTenter no of vertices 9 ente no of edges9EDGES1 22 31 51 44 77 88 92 65 7enter initial vertex1Visited vertices12 4 5 3 6 7 8 9

Page 12: DS Pgm Using Cpp

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;}}OUTPUTenterno of vertices9ente no of edges9EDGES1 22 32 61 51 44 75 77 88 9enter initial vertex1ORDER OF VISITED VERTICES1 2 3 6 4 7 8 9 5

Page 13: DS Pgm Using Cpp

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;

Page 14: DS Pgm Using Cpp

}}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();

}

Page 15: DS Pgm Using Cpp

C++ programs to implement the Prim’s 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;

}}

Page 16: DS Pgm Using Cpp

OUTPUTenterno of vertices7ente no of edges9EDGES Cost1 6 106 5 255 4 224 3 123 2 162 7 145 7 244 7 181 2 28ORDER OF VISITED VERTICES1 6 5 4 3 2

Page 17: DS Pgm Using Cpp

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 10int 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)

Page 18: DS Pgm Using Cpp

puts(idnt[r[i][j]]);elsereturn;print(i,r[i][j]-1);print(r[i][j],j);}

OUTPUTenter the no, of identifiers4enter identifiersdoifintwhileenter success propability for identifiers3 3 1 1enter failure propability for identifiers2 3 1 1 1tree in preorder formifdointwhile