From f5c4671bfbad96bf346bd7e9a21fc4317b4959df Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Sat, 3 Dec 2022 17:00:20 +0530 Subject: Adds most of the tools --- v_windows/v/examples/bfs.v | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 v_windows/v/examples/bfs.v (limited to 'v_windows/v/examples/bfs.v') diff --git a/v_windows/v/examples/bfs.v b/v_windows/v/examples/bfs.v new file mode 100644 index 0000000..ff20fdf --- /dev/null +++ b/v_windows/v/examples/bfs.v @@ -0,0 +1,41 @@ +// Breadth-First Search (BFS) allows you to find the shortest distance between two nodes in the graph. +fn breadth_first_search_path(graph map[string][]string, vertex string, target string) []string { + mut path := []string{} + mut visited := []string{init: vertex} + mut queue := [][][]string{} + queue << [[vertex], path] + for queue.len > 0 { + mut idx := queue.len - 1 + node := queue[idx][0][0] + path = queue[idx][1] + queue.delete(idx) + if node == target { + path << node + return path + } + for child in graph[node] { + mut tmp := path.clone() + if child !in visited { + visited << child + tmp << node + queue << [[child], tmp] + } + } + } + return path +} + +fn main() { + graph := { + 'A': ['B', 'C'] + 'B': ['A', 'D', 'E'] + 'C': ['A', 'F'] + 'D': ['B'] + 'E': ['B', 'F'] + 'F': ['C', 'E'] + } + println('Graph: $graph') + path := breadth_first_search_path(graph, 'A', 'F') + println('The shortest path from node A to node F is: $path') + assert path == ['A', 'C', 'F'] +} -- cgit v1.2.3