TRAVELING SALESMAN PROBLEM USING DYNAMIC APPROACH




#include<iostream.h>
#include<conio.h>
class dynamic
{
public:
int min,i,j,k,n,g[20][20],c[20][20],s,s1[20][20],s2;
void getdata();
void calc();
void display();
};
void dynamic::getdata()
{
cout<<"Travelling salesman problem:\n";
cout<<"Input number of cities:\n";
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=1;j<=n;j++)
{
if(i!=j)
g[i][j]=c[i][j]+g[j][0];
}
}
}
void dynamic::calc()
{
for(i=2;i<=n;i++)
{
for(j=2;j<=n;j++)
{
if(i!=j)
break;
}
}
for(k=1;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;
}
}
}
void dynamic::display()
{
cout<<"Edge matrix:\n";
for(i=1;i<n;i++)
{
cout<<"\n";
for(j=1;j<=n;j++)
{
cout<<"\t"<<c[i][j];
}
}
cout<<"\nMIN:"<<min;
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";
}
void main()
{
clrscr();
dynamic obj;
obj.getdata();
obj.calc();
obj.display();
getch();
}





OUTPUT:

TRAVELING SALESMAN PROBLEM

Input number of cities: 3
Input 1 to 2cost:56
Input 1 to 3cost:22
Input 2 to 1cost:11
Input 2 to 3cost:22
Input 3 to 1cost:56
Input 3 to 2cost:78

Edge matrix:

        0       56      22
        11      0       22
        56      78      0

MIN: 78

1->3->0->2->1

Comments

Popular posts from this blog

TRAVELING SALESMAN USING BRANCH AND BOUND TECHNIQUE

BOOKS DETAILS USING C STRUCTURE

TRAVELING SALESMAN USING BRANCH AND BOUND TECHNIQUE