#include <stdio.h>
#define INF 999
#define MAX 20
int main( ) {
int n, s, cost[ MAX] [ MAX] , dist[ MAX] , visited[ MAX] = { 0 } ;
int i, j, count;
printf ( "Enter the number of vertices: " ) ; printf ( "Enter the weighted matrix:\n " ) ; for ( i = 0 ; i < n; i++ )
for ( j = 0 ; j < n; j++ )
scanf ( "%d" , & cost
[ i
] [ j
] ) ; printf ( "Enter the source vertex: " ) ; for ( i = 0 ; i < n; i++ )
dist[ i] = cost[ s] [ i] ;
dist[ s] = 0 ;
visited[ s] = 1 ;
for ( count = 1 ; count < n; count++ ) {
int min = INF, u = - 1 ;
for ( i = 0 ; i < n; i++ )
if ( ! visited[ i] && dist[ i] < min) {
min = dist[ i] ;
u = i;
}
if ( u == - 1 )
break ;
visited[ u] = 1 ;
for ( i = 0 ; i < n; i++ )
if ( ! visited[ i] && cost[ u] [ i] != INF &&
dist[ u] + cost[ u] [ i] < dist[ i] )
dist[ i] = dist[ u] + cost[ u] [ i] ;
}
printf ( "The shortest path between source %d to remaining vertices are:\n " , s
) ; for ( i = 0 ; i < n; i++ )
if ( i != s)
printf ( "%d -> %d = %d\n " , s
, i
, dist
[ i
] ) ; return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgSU5GIDk5OQojZGVmaW5lIE1BWCAyMAppbnQgbWFpbigpIHsKIGludCBuLCBzLCBjb3N0W01BWF1bTUFYXSwgZGlzdFtNQVhdLCB2aXNpdGVkW01BWF0gPSB7MH07CiBpbnQgaSwgaiwgY291bnQ7CiBwcmludGYoIkVudGVyIHRoZSBudW1iZXIgb2YgdmVydGljZXM6ICIpOwogc2NhbmYoIiVkIiwgJm4pOwogcHJpbnRmKCJFbnRlciB0aGUgd2VpZ2h0ZWQgbWF0cml4OlxuIik7CiBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogZm9yIChqID0gMDsgaiA8IG47IGorKykKIHNjYW5mKCIlZCIsICZjb3N0W2ldW2pdKTsKIHByaW50ZigiRW50ZXIgdGhlIHNvdXJjZSB2ZXJ0ZXg6ICIpOwogc2NhbmYoIiVkIiwgJnMpOwogZm9yIChpID0gMDsgaSA8IG47IGkrKykKIGRpc3RbaV0gPSBjb3N0W3NdW2ldOwogZGlzdFtzXSA9IDA7CiB2aXNpdGVkW3NdID0gMTsKIGZvciAoY291bnQgPSAxOyBjb3VudCA8IG47IGNvdW50KyspIHsKIGludCBtaW4gPSBJTkYsIHUgPSAtMTsKIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiBpZiAoIXZpc2l0ZWRbaV0gJiYgZGlzdFtpXSA8IG1pbikgewogbWluID0gZGlzdFtpXTsKIHUgPSBpOwogfQogaWYgKHUgPT0gLTEpCiBicmVhazsKIHZpc2l0ZWRbdV0gPSAxOwogZm9yIChpID0gMDsgaSA8IG47IGkrKykKIGlmICghdmlzaXRlZFtpXSAmJiBjb3N0W3VdW2ldICE9IElORiAmJgogZGlzdFt1XSArIGNvc3RbdV1baV0gPCBkaXN0W2ldKQogZGlzdFtpXSA9IGRpc3RbdV0gKyBjb3N0W3VdW2ldOwogfQogcHJpbnRmKCJUaGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIHNvdXJjZSAlZCB0byByZW1haW5pbmcgdmVydGljZXMgYXJlOlxuIiwgcyk7CiBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogaWYgKGkgIT0gcykKIHByaW50ZigiJWQgLT4gJWQgPSAlZFxuIiwgcywgaSwgZGlzdFtpXSk7CiByZXR1cm4gMDsKfQ==