Dijkstra's algorithm, conceived by computer scientist Edsger Dijkstra in 1956 and published in 1959, is a graph search algorithm that solves the single-source shortest path problem for a graph with non-negative edge path costs, producing a shortest path tree. This algorithm is often used in routing and as a subroutine in other graph algorithms.
C code:
#include<stdio.h>
min(int x,int y)
{
if(x<y){return x;}
else
return y;
}
main()
{
int n;
printf("Enter the total number of nodes\n");
scanf("%d",&n);
int adj[n][n];//Adjacency Matrix
int weight[n][n];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
weight[i][j]=0;
printf("Is node %d connected to node %d",i+1,j+1);//Press 1 if yes else press 0
scanf("%d",&adj[i][j]);
if(adj[i][j]==1)
{
printf("Enter weight of %d to %d",i+1,j+1);
scanf("%d",&weight[i][j]);
}
}
}
printf("Enter the starting node\n");
int start;
scanf("%d",&start);
start--;
int visit[n];
int cnt=1;
int dist[n];
for(i=0;i<n;i++)
{
visit[i]=0;
dist[i]=1000000;
}
visit[start]=1;
dist[start]=0;
int cur=start;
while(cnt!=n)//Will run till all the nodes are not visited
{
int counter=0;
for(i=0;i<n;i++)
{
if(adj[cur][i]==1&&!(visit[i]))
{
int yu=(dist[cur]+weight[cur][i]);
dist[i]=min(dist[i],yu);
}
}
int least=10000;
for(i=0;i<n;i++)
{
if(!(visit[i]))
{
least=min(dist[i],least);
if(least==dist[i])
{
cur=i;
}
}
}
visit[cur]=1;
cnt++;
}
start++;
printf("\nLengths:\n");
for(i=0;i<n;i++)
printf("%d->%d=%d\n",start,i+1,dist[i]);
}
C code:
#include<stdio.h>
min(int x,int y)
{
if(x<y){return x;}
else
return y;
}
main()
{
int n;
printf("Enter the total number of nodes\n");
scanf("%d",&n);
int adj[n][n];//Adjacency Matrix
int weight[n][n];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
weight[i][j]=0;
printf("Is node %d connected to node %d",i+1,j+1);//Press 1 if yes else press 0
scanf("%d",&adj[i][j]);
if(adj[i][j]==1)
{
printf("Enter weight of %d to %d",i+1,j+1);
scanf("%d",&weight[i][j]);
}
}
}
printf("Enter the starting node\n");
int start;
scanf("%d",&start);
start--;
int visit[n];
int cnt=1;
int dist[n];
for(i=0;i<n;i++)
{
visit[i]=0;
dist[i]=1000000;
}
visit[start]=1;
dist[start]=0;
int cur=start;
while(cnt!=n)//Will run till all the nodes are not visited
{
int counter=0;
for(i=0;i<n;i++)
{
if(adj[cur][i]==1&&!(visit[i]))
{
int yu=(dist[cur]+weight[cur][i]);
dist[i]=min(dist[i],yu);
}
}
int least=10000;
for(i=0;i<n;i++)
{
if(!(visit[i]))
{
least=min(dist[i],least);
if(least==dist[i])
{
cur=i;
}
}
}
visit[cur]=1;
cnt++;
}
start++;
printf("\nLengths:\n");
for(i=0;i<n;i++)
printf("%d->%d=%d\n",start,i+1,dist[i]);
}
No comments:
Post a Comment