Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type vertex = { Number: int; Edges: int list }
- let graph = [
- { Number = 1; Edges = [11] };
- { Number = 2; Edges = [11] };
- { Number = 3; Edges = [11; 4] };
- { Number = 4; Edges = [3; 12] };
- { Number = 5; Edges = [12] };
- { Number = 6; Edges = [13; 7] };
- { Number = 7; Edges = [6; 13; 8] };
- { Number = 8; Edges = [7; 13; 9] };
- { Number = 9; Edges = [8; 10] };
- { Number = 10; Edges = [9; 14] };
- { Number = 11; Edges = [1; 2; 3; 14] };
- { Number = 12; Edges = [5; 13; 14] };
- { Number = 13; Edges = [12; 6; 7; 8; 14] };
- { Number = 14; Edges = [11; 12; 13; 10] };
- ]
- let paths graph origin destination =
- let rec loop current visited =
- if current = destination
- then [[current]]
- else if List.contains current visited
- then []
- else
- let test elem = if elem.Number = current
- then Some(elem.Edges)
- else None
- let vertices = match List.tryPick test graph with
- | None -> []
- | Some(vertices) -> vertices
- vertices |> List.collect (fun x -> loop x (current :: visited))
- |> List.map (fun x -> List.append [current] x)
- loop origin []
- paths graph 3 8
- [3; 11; 14; 12; 13; 6; 7; 8]
- [3; 11; 14; 12; 13; 7; 8]
- [3; 11; 14; 12; 13; 8]
- [3; 11; 14; 13; 6; 7; 8]
- [3; 11; 14; 13; 7; 8]
- [3; 11; 14; 13; 8]
- [3; 11; 14; 10; 9; 8]
- [3; 4; 12; 13; 6; 7; 8]
- [3; 4; 12; 13; 7; 8]
- [3; 4; 12; 13; 8]
- [3; 4; 12; 13; 14; 10; 9; 8]
- [3; 4; 12; 14; 13; 6; 7; 8]
- [3; 4; 12; 14; 13; 7; 8]
- [3; 4; 12; 14; 13; 8]
- [3; 4; 12; 14; 10; 9; 8]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement