single source shortest path using Dijkstra
#include <stdio.h>
#define INF 9999
#define MAX 10


void dijkstra(int graph[MAX][MAX], int n, int src)
{
    int dist[MAX], visited[MAX] = {0};


    for (int i = 0; i < n; i++)
        dist[i] = INF;
    dist[src] = 0;


    for (int count = 0; count < n - 1; count++)
    {
        int min = INF, u;


        for (int i = 0; i < n; i++)
            if (!visited[i] && dist[i] <= min)
            {
                min = dist[i];
                u = i;
            }


        visited[u] = 1;


        for (int v = 0; v < n; v++)
            if (!visited[v] && graph[u][v] && dist[u] + graph[u][v] < dist[v])
                dist[v] = dist[u] + graph[u][v];
    }


    printf("\nVertex\tDistance from Source %d\n", src);
    for (int i = 0; i < n; i++)
        printf("%d\t%d\n", i, dist[i]);
}


int main()
{
    int graph[MAX][MAX], n, src;


    printf("Enter number of vertices: ");
    scanf("%d", &n);


    printf("Enter the adjacency matrix (use 0 for no edge):\n");
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &graph[i][j]);


    printf("Enter the source vertex (0 to %d): ", n - 1);
    scanf("%d", &src);


    dijkstra(graph, n, src);


    return 0;
}
