# gaurav-125/rubik-s-cube-solver architecture

> Architecture diagram of the GitHub repository gaurav-125/rubik-s-cube-solver, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gaurav-125/rubik-s-cube-solver
- Repository: https://github.com/gaurav-125/rubik-s-cube-solver

## Overview

This is a C++ Rubik’s Cube model and search-solver project. Its active example creates a bitboard cube, shuffles it, asks IDA* to solve it, then displays the moves and resulting cube. The shared abstract cube API supports three state representations and common move, solved-state, and display operations; the solver directory also contains BFS, DFS, and iterative-deepening DFS. The README is empty, so capabilities are inferred from the source index and excerpts; relationships for unused solver variants are shown only where their implementations support them.

Main entry points: [`GenericsRubiksCube.h`](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.h) (Cube API), [`main.cpp`](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/main.cpp) (Demo run), [`Solver/IDDFSsolver.h`](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/IDDFSsolver.h) (Iterative DFS), [`GenericsRubiksCube.cpp`](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.cpp) (Cube operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cube_model["Cube model"]
  node_cube_api["Cube API"]
  node_cube_logic["Cube operations"]
end

subgraph group_representations["State representations"]
  node_array3d["3D array"]
  node_array1d["1D array"]
  node_bitboard["Bitboard"]
end

subgraph group_search["Search solvers"]
  node_bfs["BFS<br/>[BFSsolver.h]"]
  node_dfs["DFS<br/>[DFSsolver.h]"]
  node_iddfs["Iterative DFS<br/>[IDDFSsolver.h]"]
  node_ida["IDA*<br/>[IDAstarSolver.h]"]
end

node_demo["Demo run<br/>[main.cpp]"]

node_demo -->|"creates and shuffles"| node_bitboard
node_demo -->|"solves with"| node_ida
node_demo -->|"prints and formats"| node_cube_logic
node_ida -->|"searches via"| node_cube_api
node_bfs -->|"searches via"| node_cube_api
node_dfs -->|"searches via"| node_cube_api
node_iddfs -->|"searches via"| node_cube_api
node_iddfs -->|"iterates"| node_dfs
node_cube_logic -->|"implements operations"| node_cube_api
node_array3d -->|"implements state API"| node_cube_api
node_array1d -->|"implements state API"| node_cube_api
node_bitboard -->|"implements state API"| node_cube_api

click node_demo "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/main.cpp"
click node_cube_api "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.h"
click node_cube_logic "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.cpp"
click node_array3d "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCube3dArray.cpp"
click node_array1d "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCube1dArray.cpp"
click node_bitboard "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCubeBitboard.cpp"
click node_bfs "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/BFSsolver.h"
click node_dfs "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/DFSsolver.h"
click node_iddfs "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/IDDFSsolver.h"
click node_ida "https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/IDAstarSolver.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cube_api,node_cube_logic toneBlue
class node_array3d,node_array1d,node_bitboard toneAmber
class node_bfs,node_dfs,node_iddfs,node_ida toneMint
class node_demo toneTeal
```

## Components

### Cube model

- [Cube API](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.h): `GenericsRubiksCube.h`
- [Cube operations](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/GenericsRubiksCube.cpp): `GenericsRubiksCube.cpp`

### State representations

- [3D array](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCube3dArray.cpp): `RubiksCube3dArray.cpp`
- [1D array](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCube1dArray.cpp): `RubiksCube1dArray.cpp`
- [Bitboard](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/RubiksCubeBitboard.cpp): `RubiksCubeBitboard.cpp`

### Search solvers

- [BFS](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/BFSsolver.h): `Solver/BFSsolver.h`
- [DFS](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/DFSsolver.h): `Solver/DFSsolver.h`
- [Iterative DFS](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/IDDFSsolver.h): `Solver/IDDFSsolver.h`
- [IDA*](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/Solver/IDAstarSolver.h): `Solver/IDAstarSolver.h`

### Other components

- [Demo run](https://github.com/gaurav-125/rubik-s-cube-solver/blob/main/main.cpp): `main.cpp`

## Connections

- Demo run → Bitboard: creates and shuffles (evidence: `main.cpp`)
- Demo run → IDA*: solves with (evidence: `main.cpp`)
- Demo run → Cube operations: prints and formats (evidence: `main.cpp`)
- IDA* → Cube API: searches via (evidence: `Solver/IDAstarSolver.h`)
- BFS → Cube API: searches via (evidence: `Solver/BFSsolver.h`)
- DFS → Cube API: searches via (evidence: `Solver/DFSsolver.h`)
- Iterative DFS → Cube API: searches via (evidence: `Solver/IDDFSsolver.h`)
- Iterative DFS → DFS: iterates (evidence: `Solver/IDDFSsolver.h`)
- Cube operations → Cube API: implements operations (evidence: `GenericsRubiksCube.cpp`)
- 3D array → Cube API: implements state API (evidence: `RubiksCube3dArray.cpp`)
- 1D array → Cube API: implements state API (evidence: `RubiksCube1dArray.cpp`)
- Bitboard → Cube API: implements state API (evidence: `RubiksCubeBitboard.cpp`)
