# Generated by tools/algo/legacy.py from the corpus: do not edit. # TheAlgorithms' all_permutations.py backtracking (backtracking.viv). # Element comparisons are routed through lib/algo/legacy/order.viv; nothing else changes. import algo.legacy.order # from study/idioms/thealgorithms-python/backtracking.viv: create_state_space_tree generate_all_permutations #| all_permutations.py create_state_space_tree: extend the current sequence by each #| unused item, recurse, then undo. Python appends to and pops a list; here position #| `index` of a fixed-length array is overwritten. Returns how many it printed. def create_state_space_tree(sequence: Arr, current: Arr, index, used: Arr, as_text: Bool) { if index == len(sequence) { if as_text { text(current) } else { show current } return 1.0 } count = 0.0 for i to len(sequence) { if used[i] == 0.0 { current[index] = sequence[i] used[i] = 1.0 count += create_state_space_tree(sequence, current, index + 1.0, used, as_text) used[i] = 0.0 } } return count } def generate_all_permutations(sequence: Arr, as_text: Bool) { n = len(sequence) return create_state_space_tree(sequence, zeros(n), 0.0, zeros(n), as_text) }