aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/examples/bfs.v
blob: b92763ebc5f726010e9845c891a65b826660a336 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 := map{
		'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']
}