Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

#include<stdio.

h>
#include<stdlib.h>
#include<limits.h>

#define V 4

int minDistance(int dist[],int visited[])


{
int min=INT_MAX,min_index;
for(int v=0;v<V;v++)
if (visited[v]==0 && dist[v]<=min)
min=dist[v] ,min_index=v;
return min_index;
}
void printPath(int parent[],int j)
{
if(parent[j] == -1)
return;

printPath(parent,parent[j]);
printf("%d",j);
}
void printSolution(int dist[],int parent[])
{
int src=0;
printf("Vertex\t Distance \t Path \n");
for(int i=1;i<V;i++)
{
printf("%d -->%d\t %d\t\t %d",src,i,dist[i],src);
printPath(parent,i);
printf("\n");
}
}

void nearestNeighbor(int graph[V][V])


{
int parent[V];
int dist[V];
int visited[V];

for(int i=0;i<V;i++)
{
dist[i]=INT_MAX,visited[i]=0,parent[i]=-1;
}

dist[0]=0;

for(int count=0;count<V-1;count++)
{
int u=minDistance(dist,visited);
visited[u]=1;

for(int v=0;v<V;v++)
if(!visited[v] && graph[u][v] && dist[u]+graph[u][v] <dist[v])
parent[v]=u,dist[v]=dist[u]+graph[u][v];
}
printSolution(dist,parent);
}
int main()
{
int graph[V][V]={
{0,10,15,20},
{10,0,35,25},
{15,35,0,30},
{20,25,30,0}
};
nearestNeighbor(graph);
return 0;
}

You might also like