diff --git a/dijsktra-sequential.c b/dijsktra-sequential.c
new file mode 100644
index 0000000000000000000000000000000000000000..4f2ad0a64dc10ff2a0079c011d92aa4f8069a5d8
--- /dev/null
+++ b/dijsktra-sequential.c
@@ -0,0 +1,115 @@
+#include <limits.h> 
+#include <stdio.h>
+#include <stdlib.h>
+#include <omp.h>
+
+#define NIM 13517075
+typedef enum { false, true } bool;
+
+int minDistance(int V, int dist[], bool sptSet[]) { 
+	int min = INT_MAX, min_index = -1; 
+
+	for (int v = 0; v < V; v++) 
+		if (sptSet[v] == false && dist[v] <= min) 
+			min = dist[v], min_index = v; 
+
+	return min_index; 
+} 
+
+int printSolution(FILE *file, int V, int dist[]) { 
+
+    for (int i = 0; i < V; i++) {
+        fprintf(file,"%d",dist[i]);
+        if(i<(V-1)){
+            fprintf(file," ");
+        }
+        
+    }
+    fprintf(file,"\n");
+} 
+
+void dijkstra(int V, int graph[V * V], int dist[V], int src) { 
+	bool sptSet[V];
+
+	for (int i = 0; i < V; i++) 
+		dist[i] = INT_MAX, sptSet[i] = false; 
+
+	dist[src] = 0;
+
+	for (int count = 0; count < V - 1; count++) { 
+		int u = minDistance(V, dist, sptSet); 
+
+		if (u == -1) break;
+
+        sptSet[u] = true; 
+
+		for (int v = 0; v < V; v++) {
+            int temp = dist[u] + graph[u * V + v];
+            if (
+                !sptSet[v] && 
+                temp < dist[v] && 
+                temp > 0
+            ) dist[v] = temp;
+        }
+	} 
+}
+
+void createGraph(int N, int graph[]) {
+    int value;
+    srand(NIM);
+
+    for (int i = 0; i < N; i++) {
+        for (int j = 0; j < N; j++) {
+            graph[i * N + j] = 0;
+        }
+    }
+
+    for (int i = 0; i < N; i++) {
+        for (int j = i; j < N; j++) {
+            if (i != j) {
+                value = rand() % 10000;
+                graph[i * N + j] = value;
+                graph[j * N + i] = value;
+            }         
+        }
+    }
+}
+
+int main(int argc, char **argv) {
+
+
+    FILE *output_file;
+    double end, start;
+
+
+
+    if (argc != 2) {
+        fprintf(stderr, "Usage: number of node required\n");
+        exit(1);
+    }
+
+    int N = atoi(argv[1]);
+    int* graph = malloc(N * N * sizeof(int));
+
+    // open file
+    output_file = fopen("../out/sequential.txt","w+");
+
+    createGraph(N, graph);
+    // Time start
+    start = omp_get_wtime();
+
+    for (int i = 0; i < N; i++) {
+        int* globalDist = malloc(N * sizeof(int));
+        
+	    dijkstra(N, graph, globalDist, i); 
+        printSolution(output_file,N, globalDist);
+        free(globalDist);
+    }
+    //end
+    end = omp_get_wtime();
+    double time_taken = end-start;
+    printf("Time elapsed : %f\n", time_taken);
+
+    free(graph);
+	return 0; 
+}