From 992a86d540cdc4521aee6d399700304f6931104b Mon Sep 17 00:00:00 2001 From: Hitanshu123 <56292516+Hitanshu123@users.noreply.github.com> Date: Fri, 28 Oct 2022 00:30:45 +0530 Subject: [PATCH] Dijkstras Algorithm C++ code --- C++ Codes/Dijkstras_Algorithm | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 C++ Codes/Dijkstras_Algorithm diff --git a/C++ Codes/Dijkstras_Algorithm b/C++ Codes/Dijkstras_Algorithm new file mode 100644 index 0000000..c5ab450 --- /dev/null +++ b/C++ Codes/Dijkstras_Algorithm @@ -0,0 +1,77 @@ +#include +#include +using namespace std; + + +int findMinVertex(int* distance, bool* visited, int n){ + + int minVertex = -1; + for(int i = 0; i < n; i++){ + if(!visited[i] && (minVertex == -1 || distance[i] < distance[minVertex])){ + minVertex = i; + } + } + return minVertex; +} + +void dijkstra(int** edges, int n){ + int* distance = new int[n]; + bool* visited = new bool[n]; + + for(int i = 0; i < n; i++){ + distance[i] = INT_MAX; + visited[i] = false; + } + + distance[0] = 0; + + for(int i = 0; i < n - 1; i++){ + int minVertex = findMinVertex(distance, visited, n); + visited[minVertex] = true; + for(int j = 0; j < n; j++){ + if(edges[minVertex][j] != 0 && !visited[j]){ + int dist = distance[minVertex] + edges[minVertex][j]; + if(dist < distance[j]){ + distance[j] = dist; + } + } + } + } + + for(int i = 0; i < n; i++){ + cout << i << " " << distance[i] << endl; + } + delete [] visited; + delete [] distance; + +} + +int main() { + int n; + int e; + cin >> n >> e; + int** edges = new int*[n]; + for (int i = 0; i < n; i++) { + edges[i] = new int[n]; + for (int j = 0; j < n; j++) { + edges[i][j] = 0; + } + } + + for (int i = 0; i < e; i++) { + int f, s, weight; + cin >> f >> s >> weight; + edges[f][s] = weight; + edges[s][f] = weight; + } + cout << endl; + dijkstra(edges, n); + + for (int i = 0; i < n; i++) { + delete [] edges[i]; + } + delete [] edges; +} + + +