Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(Please solve it using C language NOT C++) Write a C program .. Traditional Dijk

ID: 3718598 • Letter: #

Question

(Please solve it using C language NOT C++) Write a C program .. Traditional Dijkstra algorithm search for the shortest path from the source node to a distention node in a map with a single source.it's only finds one shortest path through searching and skip over other paths with the same distance.
. . Please take a look at these papers, may be its useful to you. (Please help??)


Write a C program .. Traditional Dijkstra algorithm search for the shortest path from the source node to a distention node in a map with a single source.it's only finds one shortest path through searching and skip over other paths with the same distance.
. . Please take a look at these papers, may be its useful to you. (Please help??)


Explanation / Answer

#include<stdio.h>

#include<conio.h>

#define INFINITY 9999

#define MAX 10

void dijkstra(int G[MAX][MAX],int n,int startnode);

int main()

{

    int G[MAX][MAX],i,j,n,u;

    printf("Enter no. of vertices:");

    scanf("%d",&n);

    printf(" Enter the adjacency matrix: ");

    

    for(i=0;i<n;i++)

        for(j=0;j<n;j++)

            scanf("%d",&G[i][j]);

    

    printf(" Enter the starting node:");

    scanf("%d",&u);

    dijkstra(G,n,u);

    

    return 0;

}

void dijkstra(int G[MAX][MAX],int n,int startnode)

{

    int cost[MAX][MAX],distance[MAX],pred[MAX];

    int visited[MAX],count,mindistance,nextnode,i,j;

    

    //pred[] stores the predecessor of each node

    //count gives the number of nodes seen so far

    //create the cost matrix

    for(i=0;i<n;i++)

        for(j=0;j<n;j++)

            if(G[i][j]==0)

                cost[i][j]=INFINITY;

            else

                cost[i][j]=G[i][j];

    

    //initialize pred[],distance[] and visited[]

    for(i=0;i<n;i++)

    {

        distance[i]=cost[startnode][i];

        pred[i]=startnode;

        visited[i]=0;

    }

    

    distance[startnode]=0;

    visited[startnode]=1;

    count=1;

    

    while(count<n-1)

    {

        mindistance=INFINITY;

        

        //nextnode gives the node at minimum distance

        for(i=0;i<n;i++)

            if(distance[i]<mindistance&&!visited[i])

            {

                mindistance=distance[i];

                nextnode=i;

            }

            

            //check if a better path exists through nextnode            

            visited[nextnode]=1;

            for(i=0;i<n;i++)

                if(!visited[i])

                    if(mindistance+cost[nextnode][i]<distance[i])

                    {

                        distance[i]=mindistance+cost[nextnode][i];

                        pred[i]=nextnode;

                    }

        count++;

    }

    //print the path and distance of each node

    for(i=0;i<n;i++)

        if(i!=startnode)

        {

            printf(" Distance of node%d=%d",i,distance[i]);

            printf(" Path=%d",i);

            

            j=i;

            do

            {

                j=pred[j];

                printf("<-%d",j);

            }while(j!=startnode);

    }

}

How it works:

Dijkstras Algorithm works by computing and checking cost at each edge or link'

Hope it helps

Happy Learning/