// Dijkstra's Algorithm in C
#include <stdio.h>
#define INFINITY 9999
#define MAX 10
void Dijkstra( int Graph[ MAX] [ MAX] , int n, int start) ;
void Dijkstra( int Graph[ MAX] [ MAX] , int n, int start) {
int cost[ MAX] [ MAX] , distance[ MAX] , pred[ MAX] ;
int visited[ MAX] , count, mindistance, nextnode, i, j;
// Creating cost matrix
for ( i = 0 ; i < n; i++ )
for ( j = 0 ; j < n; j++ )
if ( Graph[ i] [ j] == 0 )
cost[ i] [ j] = INFINITY;
else
cost[ i] [ j] = Graph[ i] [ j] ;
for ( i = 0 ; i < n; i++ ) {
distance[ i] = cost[ start] [ i] ;
pred[ i] = start;
visited[ i] = 0 ;
}
distance[ start] = 0 ;
visited[ start] = 1 ;
count = 1 ;
while ( count < n - 1 ) {
mindistance = INFINITY;
for ( i = 0 ; i < n; i++ )
if ( distance[ i] < mindistance && ! visited[ i] ) {
mindistance = distance[ i] ;
nextnode = i;
}
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++;
}
// Printing the distance
for ( i = 0 ; i < n; i++ )
if ( i != start) {
printf ( "\n Distance from source to %d: %d" , i
, distance
[ i
] ) ; }
}
int main( ) {
int Graph[ MAX] [ MAX] , i, j, n, u;
n = 7 ;
Graph[ 0 ] [ 0 ] = 0 ;
Graph[ 0 ] [ 1 ] = 0 ;
Graph[ 0 ] [ 2 ] = 1 ;
Graph[ 0 ] [ 3 ] = 2 ;
Graph[ 0 ] [ 4 ] = 0 ;
Graph[ 0 ] [ 5 ] = 0 ;
Graph[ 0 ] [ 6 ] = 0 ;
Graph[ 1 ] [ 0 ] = 0 ;
Graph[ 1 ] [ 1 ] = 0 ;
Graph[ 1 ] [ 2 ] = 2 ;
Graph[ 1 ] [ 3 ] = 0 ;
Graph[ 1 ] [ 4 ] = 0 ;
Graph[ 1 ] [ 5 ] = 3 ;
Graph[ 1 ] [ 6 ] = 0 ;
Graph[ 2 ] [ 0 ] = 1 ;
Graph[ 2 ] [ 1 ] = 2 ;
Graph[ 2 ] [ 2 ] = 0 ;
Graph[ 2 ] [ 3 ] = 1 ;
Graph[ 2 ] [ 4 ] = 3 ;
Graph[ 2 ] [ 5 ] = 0 ;
Graph[ 2 ] [ 6 ] = 0 ;
Graph[ 3 ] [ 0 ] = 2 ;
Graph[ 3 ] [ 1 ] = 0 ;
Graph[ 3 ] [ 2 ] = 1 ;
Graph[ 3 ] [ 3 ] = 0 ;
Graph[ 3 ] [ 4 ] = 0 ;
Graph[ 3 ] [ 5 ] = 0 ;
Graph[ 3 ] [ 6 ] = 1 ;
Graph[ 4 ] [ 0 ] = 0 ;
Graph[ 4 ] [ 1 ] = 0 ;
Graph[ 4 ] [ 2 ] = 3 ;
Graph[ 4 ] [ 3 ] = 0 ;
Graph[ 4 ] [ 4 ] = 0 ;
Graph[ 4 ] [ 5 ] = 2 ;
Graph[ 4 ] [ 6 ] = 0 ;
Graph[ 5 ] [ 0 ] = 0 ;
Graph[ 5 ] [ 1 ] = 3 ;
Graph[ 5 ] [ 2 ] = 0 ;
Graph[ 5 ] [ 3 ] = 0 ;
Graph[ 5 ] [ 4 ] = 2 ;
Graph[ 5 ] [ 5 ] = 0 ;
Graph[ 5 ] [ 6 ] = 1 ;
Graph[ 6 ] [ 0 ] = 0 ;
Graph[ 6 ] [ 1 ] = 0 ;
Graph[ 6 ] [ 2 ] = 0 ;
Graph[ 6 ] [ 3 ] = 1 ;
Graph[ 6 ] [ 4 ] = 0 ;
Graph[ 6 ] [ 5 ] = 1 ;
Graph[ 6 ] [ 6 ] = 0 ;
u = 0 ;
Dijkstra( Graph, n, u) ;
return 0 ;
}
Ly8gRGlqa3N0cmEncyBBbGdvcml0aG0gaW4gQwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgSU5GSU5JVFkgOTk5OQojZGVmaW5lIE1BWCAxMAoKdm9pZCBEaWprc3RyYShpbnQgR3JhcGhbTUFYXVtNQVhdLCBpbnQgbiwgaW50IHN0YXJ0KTsKCnZvaWQgRGlqa3N0cmEoaW50IEdyYXBoW01BWF1bTUFYXSwgaW50IG4sIGludCBzdGFydCkgewogIGludCBjb3N0W01BWF1bTUFYXSwgZGlzdGFuY2VbTUFYXSwgcHJlZFtNQVhdOwogIGludCB2aXNpdGVkW01BWF0sIGNvdW50LCBtaW5kaXN0YW5jZSwgbmV4dG5vZGUsIGksIGo7CgogIC8vIENyZWF0aW5nIGNvc3QgbWF0cml4CiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspCiAgICAgIGlmIChHcmFwaFtpXVtqXSA9PSAwKQogICAgICAgIGNvc3RbaV1bal0gPSBJTkZJTklUWTsKICAgICAgZWxzZQogICAgICAgIGNvc3RbaV1bal0gPSBHcmFwaFtpXVtqXTsKCiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgZGlzdGFuY2VbaV0gPSBjb3N0W3N0YXJ0XVtpXTsKICAgIHByZWRbaV0gPSBzdGFydDsKICAgIHZpc2l0ZWRbaV0gPSAwOwogIH0KCiAgZGlzdGFuY2Vbc3RhcnRdID0gMDsKICB2aXNpdGVkW3N0YXJ0XSA9IDE7CiAgY291bnQgPSAxOwoKICB3aGlsZSAoY291bnQgPCBuIC0gMSkgewogICAgbWluZGlzdGFuY2UgPSBJTkZJTklUWTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICBpZiAoZGlzdGFuY2VbaV0gPCBtaW5kaXN0YW5jZSAmJiAhdmlzaXRlZFtpXSkgewogICAgICAgIG1pbmRpc3RhbmNlID0gZGlzdGFuY2VbaV07CiAgICAgICAgbmV4dG5vZGUgPSBpOwogICAgICB9CgogICAgdmlzaXRlZFtuZXh0bm9kZV0gPSAxOwogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgICAgaWYgKCF2aXNpdGVkW2ldKQogICAgICAgIGlmIChtaW5kaXN0YW5jZSArIGNvc3RbbmV4dG5vZGVdW2ldIDwgZGlzdGFuY2VbaV0pIHsKICAgICAgICAgIGRpc3RhbmNlW2ldID0gbWluZGlzdGFuY2UgKyBjb3N0W25leHRub2RlXVtpXTsKICAgICAgICAgIHByZWRbaV0gPSBuZXh0bm9kZTsKICAgICAgICB9CiAgICBjb3VudCsrOwogIH0KCiAgLy8gUHJpbnRpbmcgdGhlIGRpc3RhbmNlCiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgIGlmIChpICE9IHN0YXJ0KSB7CiAgICAgIHByaW50ZigiXG5EaXN0YW5jZSBmcm9tIHNvdXJjZSB0byAlZDogJWQiLCBpLCBkaXN0YW5jZVtpXSk7CiAgICB9Cn0KaW50IG1haW4oKSB7CiAgaW50IEdyYXBoW01BWF1bTUFYXSwgaSwgaiwgbiwgdTsKICBuID0gNzsKCiAgR3JhcGhbMF1bMF0gPSAwOwogIEdyYXBoWzBdWzFdID0gMDsKICBHcmFwaFswXVsyXSA9IDE7CiAgR3JhcGhbMF1bM10gPSAyOwogIEdyYXBoWzBdWzRdID0gMDsKICBHcmFwaFswXVs1XSA9IDA7CiAgR3JhcGhbMF1bNl0gPSAwOwoKICBHcmFwaFsxXVswXSA9IDA7CiAgR3JhcGhbMV1bMV0gPSAwOwogIEdyYXBoWzFdWzJdID0gMjsKICBHcmFwaFsxXVszXSA9IDA7CiAgR3JhcGhbMV1bNF0gPSAwOwogIEdyYXBoWzFdWzVdID0gMzsKICBHcmFwaFsxXVs2XSA9IDA7CgogIEdyYXBoWzJdWzBdID0gMTsKICBHcmFwaFsyXVsxXSA9IDI7CiAgR3JhcGhbMl1bMl0gPSAwOwogIEdyYXBoWzJdWzNdID0gMTsKICBHcmFwaFsyXVs0XSA9IDM7CiAgR3JhcGhbMl1bNV0gPSAwOwogIEdyYXBoWzJdWzZdID0gMDsKCiAgR3JhcGhbM11bMF0gPSAyOwogIEdyYXBoWzNdWzFdID0gMDsKICBHcmFwaFszXVsyXSA9IDE7CiAgR3JhcGhbM11bM10gPSAwOwogIEdyYXBoWzNdWzRdID0gMDsKICBHcmFwaFszXVs1XSA9IDA7CiAgR3JhcGhbM11bNl0gPSAxOwoKICBHcmFwaFs0XVswXSA9IDA7CiAgR3JhcGhbNF1bMV0gPSAwOwogIEdyYXBoWzRdWzJdID0gMzsKICBHcmFwaFs0XVszXSA9IDA7CiAgR3JhcGhbNF1bNF0gPSAwOwogIEdyYXBoWzRdWzVdID0gMjsKICBHcmFwaFs0XVs2XSA9IDA7CgogIEdyYXBoWzVdWzBdID0gMDsKICBHcmFwaFs1XVsxXSA9IDM7CiAgR3JhcGhbNV1bMl0gPSAwOwogIEdyYXBoWzVdWzNdID0gMDsKICBHcmFwaFs1XVs0XSA9IDI7CiAgR3JhcGhbNV1bNV0gPSAwOwogIEdyYXBoWzVdWzZdID0gMTsKCiAgR3JhcGhbNl1bMF0gPSAwOwogIEdyYXBoWzZdWzFdID0gMDsKICBHcmFwaFs2XVsyXSA9IDA7CiAgR3JhcGhbNl1bM10gPSAxOwogIEdyYXBoWzZdWzRdID0gMDsKICBHcmFwaFs2XVs1XSA9IDE7CiAgR3JhcGhbNl1bNl0gPSAwOwogIAogICAgdSA9IDA7CiAgRGlqa3N0cmEoR3JhcGgsIG4sIHUpOwoKICByZXR1cm4gMDsKfQ==