---
# System prepended metadata

title: Workflow delete node (Directed Graph)

---

# Workflow delete node (Directed Graph)

## Algorithms

### delete edge (a > b)

#### Draft #1

- check if (b) is connected to (0) without this edge
  - if connected delete edge and stop
  - else delete node (b)

#### Final

- cut the edge
- check for disconnected nodes and delete them
- no need for more scan as batch scan algorithm could detect all disconnected nodes once

### delete node (X)

#### Draft #1

- check for all direct children of (X) not including self after removing all edges from (X > C0, ... X < Cn)
- (this check could be optimized to single scan)
  - if child (Ci) is connected to (0) keep it
  - else delete node (Ci)
- Note: Keep track of disconnected nodes from batch scan (Cached)
  - if node is not connected from previous scan no need t scan again

#### Final

- delete node from the model
- check for disconnected nodes and delete them
- no need for more scan as batch scan algorithm could detect all disconnected nodes once

### batch connection scan

- clean (signal) property from all nodes
- start from (0) send send signal to direct children using depth first and stop if node recieved a signal
- each node resend the signal to all direct children
- after scan stopped
- check if any node didnot recieved signal , it's disconnected

### single node (X) connection scan

- clean (signal) property from all nodes
- start from (0) send send signal to direct children using depth first and stop if node recieved a signal or if node is (X)
- each node resend the signal to all direct children unless we reached node (X)
- if scan stopped without reaching node (X) then It's not connected

## Data structure

### nodes

- A list of all nodes

### edges

- We could store edges as a dictionary with key represent the start of the edge and value is a list of targets.
- root node should have edge from hidden node (0).

### Example
```mermaid
flowchart TB
A --> B
B --> C
A --> C
C --> D
B --> E
D --> E
E --> |Approve| F
E --> |Reject| F
```

#### Nodes
```json
[
    "A",
    "B",
    "C",
    "D",
    "E",
    "F"
]
```

#### Edges
```json
{
  "0": ["A"],
  "A": ["B", "C"],
  "B": ["C", "E"],
  "C": ["D"],
  "D": ["E"],
  "E": ["F". "F"]
}
```
