Wednesday, August 7, 2019

Travelling Salesman Problem in C

PROGRAM : 

#include<stdio.h>
#include<math.h>
#define INF 9999
#define min(a,b) ((a<b)?a:b)

int k, dist[10][10], v[20][2048], pt[20][2048], s;

int TSP(int i, int bit)
{
int ans=INF, j, temp, j1;
if(bit == 0)
return dist[i][s];
if(v[i][bit] != -1)
return v[i][bit];
else
{
for(j=0; j<k; j++)
{
if((j!=i) && ((bit & (1<<(k-j-1)))!=0))
{
temp = ans;
ans = min(ans,(dist[i][j] + TSP(j, (bit ^ (1<<(k-j-1))))));
if(temp!=ans)
j1 = j;
}
}
pt[i][bit] = j1;
v[i][bit] = ans;
return ans;
}
}

int main()
{
int i, j, value, p, q, t;
printf("\n\n  Enter number of vertices : ");
scanf("%d", &k);
printf("Enter cost matrix : \n");
for(i=0; i<k; i++)
{

for(j=0; j<k; j++)
{
scanf("%d", &dist[i][j]);
if(dist[i][j] == 0)
dist[i][j] = INF;
}
for(j=0; j<((int)pow(2,k))-1; j++)
{
v[i][j] = -1;
pt[i][j] = -1;
}
}

printf("Enter source vertex : ");
scanf("%d", &s);
s=s-1;
value = TSP(s, ((int)(pow(2,k)-1) ^ (1<<(k-s-1))));
if(value>=INF)
{
printf("No path exists!");
return;
}
printf("The optimal value is : %d", value);
printf("\nThe optimal path is : \n");
t = k;
p = s;
q = (int)(pow(2,k)-1) ^ (1<<(k-s-1));
printf("%d -> ", s+1);
while(t>1)
{
printf("%d -> ", pt[p][q] + 1);
p = pt[p][q];
q = q ^ (1<<(k-p-1));
t--;
}
printf("%d", s+1);
}

OUTPUT : 



No comments:

Post a Comment