examples: add a BFS example for finding the shortest distance between nodes in a graph (#10006)
parent
7288f12847
commit
4e6a19b0e5
|
@ -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 := 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']
|
||||||
|
}
|
Loading…
Reference in New Issue