plugins/drawio-diagramming/skills/data-structures/SKILL.md
Computer science data structure visualization in draw.io — arrays, linked lists, trees, graphs, hash tables, heaps, stacks, queues
npx skillsauth add markus41/claude plugins/drawio-diagramming/skills/data-structuresInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Structure | Best For | Complexity | |-----------|----------|------------| | Array | Sequential data, index access | Low | | Linked List | Insertion/deletion demos | Low | | Stack | LIFO operations, call stacks | Low | | Queue | FIFO operations, BFS | Low | | Binary Tree | Hierarchical data, BST | Medium | | AVL / Red-Black Tree | Balanced search demos | Medium | | B-Tree | Database index visualization | High | | Heap | Priority queue, heapsort | Medium | | Hash Table | Key-value mapping, collisions | Medium | | Graph | Networks, relationships, paths | Medium-High | | Trie | Prefix search, autocomplete | Medium |
Cell colors:
Default: fillColor=#DAE8FC;strokeColor=#6C8EBF; (blue)
Highlight: fillColor=#D5E8D4;strokeColor=#82B366; (green — active/found)
Alert: fillColor=#F8CECC;strokeColor=#B85450; (red — removed/error)
Visited: fillColor=#FFF2CC;strokeColor=#D6B656; (yellow — traversed)
Empty: fillColor=#F5F5F5;strokeColor=#CCCCCC; (gray — null/empty)
Text: fontColor=#333333;fontSize=14;fontFamily=Consolas;
Index: fontColor=#999999;fontSize=10;fontStyle=2; (italic, small)
Arrow: strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Index labels -->
<mxCell id="idx0" value="0" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=10;fontStyle=2;align=center;" vertex="1" parent="1">
<mxGeometry x="40" y="20" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="idx1" value="1" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=10;fontStyle=2;align=center;" vertex="1" parent="1">
<mxGeometry x="100" y="20" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="idx2" value="2" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=10;fontStyle=2;align=center;" vertex="1" parent="1">
<mxGeometry x="160" y="20" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="idx3" value="3" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=10;fontStyle=2;align=center;" vertex="1" parent="1">
<mxGeometry x="220" y="20" width="60" height="20" as="geometry"/>
</mxCell>
<mxCell id="idx4" value="4" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=10;fontStyle=2;align=center;" vertex="1" parent="1">
<mxGeometry x="280" y="20" width="60" height="20" as="geometry"/>
</mxCell>
<!-- Array cells -->
<mxCell id="a0" value="42" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontColor=#333333;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="40" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="a1" value="17" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontColor=#333333;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="100" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="a2" value="93" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontColor=#333333;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="160" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="a3" value="8" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontColor=#333333;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="220" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="a4" value="51" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontColor=#333333;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="280" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<!-- Pointer arrow -->
<mxCell id="ptr" value="current" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#B85450;fontSize=11;fontStyle=1;align=center;" vertex="1" parent="1">
<mxGeometry x="160" y="90" width="60" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Use a grid of cells. Each row shares the same Y, each column the same X. Add row/column headers with index labels.
<!-- Row 0 -->
<mxCell id="m00" value="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="80" y="40" width="50" height="40" as="geometry"/>
</mxCell>
<mxCell id="m01" value="2" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="130" y="40" width="50" height="40" as="geometry"/>
</mxCell>
<mxCell id="m02" value="3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="180" y="40" width="50" height="40" as="geometry"/>
</mxCell>
<!-- Row 1 -->
<mxCell id="m10" value="4" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="80" y="80" width="50" height="40" as="geometry"/>
</mxCell>
Each node has a data cell and a pointer cell side by side:
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Node 1 -->
<mxCell id="n1data" value="10" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="40" y="60" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="n1ptr" value="•" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=18;" vertex="1" parent="1">
<mxGeometry x="100" y="60" width="30" height="40" as="geometry"/>
</mxCell>
<!-- Node 2 -->
<mxCell id="n2data" value="20" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="200" y="60" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="n2ptr" value="•" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=18;" vertex="1" parent="1">
<mxGeometry x="260" y="60" width="30" height="40" as="geometry"/>
</mxCell>
<!-- Node 3 (tail) -->
<mxCell id="n3data" value="30" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="360" y="60" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="n3ptr" value="∅" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#CCCCCC;fontSize=14;" vertex="1" parent="1">
<mxGeometry x="420" y="60" width="30" height="40" as="geometry"/>
</mxCell>
<!-- Arrows -->
<mxCell id="e12" style="edgeStyle=entityRelationEdgeStyle;strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;" edge="1" source="n1ptr" target="n2data" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e23" style="edgeStyle=entityRelationEdgeStyle;strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;" edge="1" source="n2ptr" target="n3data" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Head label -->
<mxCell id="head" value="head" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#B85450;fontSize=11;fontStyle=1;align=center;" vertex="1" parent="1">
<mxGeometry x="40" y="36" width="60" height="20" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Same as above but add a second pointer cell on the left of each node, and backward arrows.
Vertical arrangement, top item highlighted:
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="sLabel" value="<b>Stack</b>" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#333333;fontSize=16;align=center;" vertex="1" parent="1">
<mxGeometry x="60" y="10" width="80" height="24" as="geometry"/>
</mxCell>
<!-- Top (most recent push) -->
<mxCell id="s3" value="<b>C</b> ← top" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="40" y="40" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="s2" value="B" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="40" y="80" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="s1" value="A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="40" y="120" width="120" height="40" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Horizontal arrangement with front/rear labels:
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="front" value="front →" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#B85450;fontSize=11;fontStyle=1;align=right;" vertex="1" parent="1">
<mxGeometry x="0" y="48" width="55" height="24" as="geometry"/>
</mxCell>
<mxCell id="q1" value="A" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="60" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="q2" value="B" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="120" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="q3" value="C" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="180" y="40" width="60" height="40" as="geometry"/>
</mxCell>
<mxCell id="rear" value="← rear" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#B85450;fontSize=11;fontStyle=1;align=left;" vertex="1" parent="1">
<mxGeometry x="245" y="48" width="55" height="24" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Root -->
<mxCell id="n8" value="8" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="260" y="40" width="50" height="50" as="geometry"/>
</mxCell>
<!-- Level 1 -->
<mxCell id="n3" value="3" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="140" y="130" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="n10" value="10" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="380" y="130" width="50" height="50" as="geometry"/>
</mxCell>
<!-- Level 2 -->
<mxCell id="n1" value="1" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="80" y="220" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="n6" value="6" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=16;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="200" y="220" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="n14" value="14" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="440" y="220" width="50" height="50" as="geometry"/>
</mxCell>
<!-- Edges -->
<mxCell id="e1" style="strokeColor=#666666;strokeWidth=2;endArrow=none;" edge="1" source="n8" target="n3" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e2" style="strokeColor=#666666;strokeWidth=2;endArrow=none;" edge="1" source="n8" target="n10" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e3" style="strokeColor=#666666;strokeWidth=2;endArrow=none;" edge="1" source="n3" target="n1" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e4" style="strokeColor=#666666;strokeWidth=2;endArrow=none;" edge="1" source="n3" target="n6" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="e5" style="strokeColor=#666666;strokeWidth=2;endArrow=none;" edge="1" source="n10" target="n14" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
| Type | Style | Use |
|------|-------|-----|
| Default node | ellipse;fillColor=#DAE8FC;strokeColor=#6C8EBF; | Unvisited |
| Current / found | ellipse;fillColor=#D5E8D4;strokeColor=#82B366; | Highlight during traversal |
| Removed | ellipse;fillColor=#F8CECC;strokeColor=#B85450;dashed=1; | Deleted node |
| Null leaf | ellipse;fillColor=#F5F5F5;strokeColor=#CCCCCC;fontColor=#CCCCCC; | NIL sentinel |
Add balance factor as a superscript label above each node:
<mxCell id="bf" value="bf=+1" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#999999;fontSize=9;align=center;" vertex="1" parent="1">
<mxGeometry x="250" y="24" width="70" height="16" as="geometry"/>
</mxCell>
Show both the tree view and the underlying array. Use the same node IDs so the relationship is clear.
Tree layout is identical to BST above. Below the tree, add the array view:
<!-- Array representation -->
<mxCell id="arrLabel" value="<b>Array:</b>" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#333;fontSize=12;align=right;" vertex="1" parent="1">
<mxGeometry x="0" y="320" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="h0" value="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="70" y="320" width="45" height="30" as="geometry"/>
</mxCell>
<mxCell id="h1" value="3" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="115" y="320" width="45" height="30" as="geometry"/>
</mxCell>
<mxCell id="h2" value="5" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=13;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="160" y="320" width="45" height="30" as="geometry"/>
</mxCell>
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="<b>Hash Table (size=5, separate chaining)</b>" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#333;fontSize=14;align=left;" vertex="1" parent="1">
<mxGeometry x="20" y="10" width="400" height="24" as="geometry"/>
</mxCell>
<!-- Bucket 0 -->
<mxCell id="b0" value="[0]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#999999;fontSize=13;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="50" width="60" height="36" as="geometry"/>
</mxCell>
<mxCell id="b0n1" value=""apple"" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=12;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="120" y="50" width="80" height="36" as="geometry"/>
</mxCell>
<mxCell id="b0e1" style="strokeColor=#666;strokeWidth=1;endArrow=block;endFill=1;" edge="1" source="b0" target="b0n1" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<!-- Bucket 1 (empty) -->
<mxCell id="b1" value="[1]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#999999;fontSize=13;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="96" width="60" height="36" as="geometry"/>
</mxCell>
<mxCell id="b1null" value="null" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#CCCCCC;fontSize=11;fontFamily=Consolas;fontStyle=2;" vertex="1" parent="1">
<mxGeometry x="120" y="104" width="40" height="20" as="geometry"/>
</mxCell>
<!-- Bucket 2 (chain of 2) -->
<mxCell id="b2" value="[2]" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#999999;fontSize=13;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="20" y="142" width="60" height="36" as="geometry"/>
</mxCell>
<mxCell id="b2n1" value=""banana"" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=12;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="120" y="142" width="80" height="36" as="geometry"/>
</mxCell>
<mxCell id="b2n2" value=""grape"" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontSize=12;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="240" y="142" width="80" height="36" as="geometry"/>
</mxCell>
<mxCell id="b2e1" style="strokeColor=#666;strokeWidth=1;endArrow=block;endFill=1;" edge="1" source="b2" target="b2n1" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="b2e2" style="strokeColor=#666;strokeWidth=1;endArrow=block;endFill=1;" edge="1" source="b2n1" target="b2n2" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Use a single row of cells (like an array) with color coding:
| Color | Meaning |
|-------|---------|
| Blue (#DAE8FC) | Occupied — hashed to this index |
| Yellow (#FFF2CC) | Occupied — probed to this index (collision) |
| Gray (#F5F5F5) | Empty slot |
| Red (#F8CECC) | Tombstone (deleted) |
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Vertices -->
<mxCell id="vA" value="A" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="200" y="40" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="vB" value="B" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="80" y="160" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="vC" value="C" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="320" y="160" width="50" height="50" as="geometry"/>
</mxCell>
<mxCell id="vD" value="D" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=16;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="200" y="280" width="50" height="50" as="geometry"/>
</mxCell>
<!-- Directed edges with weights -->
<mxCell id="eAB" value="4" style="strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;fontColor=#B85450;fontSize=11;fontStyle=1;" edge="1" source="vA" target="vB" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="eAC" value="2" style="strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;fontColor=#B85450;fontSize=11;fontStyle=1;" edge="1" source="vA" target="vC" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="eBD" value="3" style="strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;fontColor=#B85450;fontSize=11;fontStyle=1;" edge="1" source="vB" target="vD" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="eCD" value="1" style="strokeColor=#666666;strokeWidth=2;endArrow=block;endFill=1;fontColor=#B85450;fontSize=11;fontStyle=1;" edge="1" source="vC" target="vD" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Same as directed but use endArrow=none;startArrow=none; on edges.
Show BFS/DFS state with node colors:
| State | Fill | Meaning |
|-------|------|---------|
| Unvisited | #DAE8FC (blue) | Not yet discovered |
| In queue/stack | #FFF2CC (yellow) | Discovered, not processed |
| Processing | #D5E8D4 (green) | Currently visiting |
| Completed | #E6E6E6 (gray) | Fully processed |
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<!-- Root -->
<mxCell id="root" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#E6E6E6;strokeColor=#999;fontSize=12;" vertex="1" parent="1">
<mxGeometry x="200" y="20" width="30" height="30" as="geometry"/>
</mxCell>
<!-- Level 1 -->
<mxCell id="c" value="c" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="120" y="80" width="36" height="36" as="geometry"/>
</mxCell>
<mxCell id="d" value="d" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="280" y="80" width="36" height="36" as="geometry"/>
</mxCell>
<!-- Level 2 -->
<mxCell id="ca" value="a" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="80" y="150" width="36" height="36" as="geometry"/>
</mxCell>
<mxCell id="co" value="o" style="ellipse;whiteSpace=wrap;html=1;fillColor=#DAE8FC;strokeColor=#6C8EBF;fontSize=14;fontFamily=Consolas;" vertex="1" parent="1">
<mxGeometry x="160" y="150" width="36" height="36" as="geometry"/>
</mxCell>
<!-- Level 3 — word end nodes highlighted -->
<mxCell id="cat" value="t" style="ellipse;whiteSpace=wrap;html=1;fillColor=#D5E8D4;strokeColor=#82B366;fontSize=14;fontFamily=Consolas;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="80" y="220" width="36" height="36" as="geometry"/>
</mxCell>
<!-- "cat" label -->
<mxCell id="catLabel" value=""cat"" style="text;html=1;fillColor=none;strokeColor=none;fontColor=#82B366;fontSize=10;align=center;" vertex="1" parent="1">
<mxGeometry x="68" y="258" width="60" height="16" as="geometry"/>
</mxCell>
<!-- Edges -->
<mxCell id="erc" style="strokeColor=#666;strokeWidth=1;endArrow=none;" edge="1" source="root" target="c" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="erd" style="strokeColor=#666;strokeWidth=1;endArrow=none;" edge="1" source="root" target="d" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="eca" style="strokeColor=#666;strokeWidth=1;endArrow=none;" edge="1" source="c" target="ca" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="eco" style="strokeColor=#666;strokeWidth=1;endArrow=none;" edge="1" source="c" target="co" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="ecat" style="strokeColor=#666;strokeWidth=1;endArrow=none;" edge="1" source="ca" target="cat" parent="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
Green nodes (#D5E8D4) mark word endings (isEnd=true).
fontFamily=Consolas; for data valuesstrokeWidth=2;endArrow=block;endFill=1; for linked structuresnull or ∅ textdevelopment
Enhanced plan-authoring skill with Pre-Writing context gathering, task metadata, non-TDD templates, Red Flags, telemetry, and an automated plan linter. Use when you have a spec or requirements for a multi-step task, before touching code.
tools
Documentation intelligence engine with graph-based API docs, algorithm library, and drift detection
tools
Ultraplan cloud planning — kick off a plan in the cloud from your terminal, review and revise in the browser, then execute remotely or send back to CLI
tools
--- name: mcp description: Configure MCP servers for Claude Code — stdio vs HTTP, authentication, Tools/Resources/Prompts distinction, channels (CI webhook, mobile relay, Discord bridge, fakechat), and cost of always-loaded tools. Use this skill whenever adding an MCP server, debugging connection issues, choosing between MCP Tools vs Prompts vs Resources, installing channel servers, or managing .mcp.json. Triggers on: "MCP server", "mcp config", "add Obsidian MCP", "install context7", "channels"