From d3885afb0ce0cf65ec0ed2f0f709c45a11c7f39b Mon Sep 17 00:00:00 2001 From: Hasan Zonuzi Date: Tue, 18 Oct 2022 14:53:09 +0330 Subject: [PATCH] feat: add dijkstra to graph algorithms --- graphs/dijkstra.dart | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 graphs/dijkstra.dart diff --git a/graphs/dijkstra.dart b/graphs/dijkstra.dart new file mode 100644 index 00000000..eca89d26 --- /dev/null +++ b/graphs/dijkstra.dart @@ -0,0 +1,57 @@ +const int MAX_VALUE = 1000000; + +class Dijkstra { + int minDist(List dist, List visited) { + int min = MAX_VALUE, min_index = -1; + for (int v = 0; v < dist.length; v++) { + if (visited[v] == false && dist[v] <= min) { + min = dist[v]; + min_index = v; + } + } + return min_index; + } + + void dijkstra(List> graph, int src) { + List dist = List.filled(graph.length, MAX_VALUE); + List visited = List.filled(graph.length, false); + + dist[src] = 0; + for (int count = 0; count < graph.length - 1; count++) { + int u = minDist(dist, visited); + visited[u] = true; + for (int v = 0; v < graph.length; v++) { + if (!visited[v] && + graph[u][v] != 0 && + dist[u] != MAX_VALUE && + dist[u] + graph[u][v] < dist[v]) { + dist[v] = dist[u] + graph[u][v]; + } + } + } + printSolution(dist); + } + + void printSolution(List dist) { + print("Vertex Distance from Source"); + for (int i = 0; i < dist.length; i++) { + print(i.toString() + " ------------> " + dist[i].toString()); + } + } +} + +void main() { + List> graph = [ + [0, 4, 0, 0, 0, 0, 0, 8, 0], + [4, 0, 8, 0, 0, 0, 0, 11, 0], + [0, 8, 0, 7, 0, 4, 0, 0, 2], + [0, 0, 7, 0, 9, 14, 0, 0, 0], + [0, 0, 0, 9, 0, 10, 0, 0, 0], + [0, 0, 4, 14, 10, 0, 2, 0, 0], + [0, 0, 0, 0, 0, 2, 0, 1, 6], + [8, 11, 0, 0, 0, 0, 1, 0, 7], + [0, 0, 2, 0, 0, 0, 6, 7, 0] + ]; + Dijkstra dij = new Dijkstra(); + dij.dijkstra(graph, 0); +}