 # Structure for arranged graph

I’m making a library that generates labyrinths or mazes. I represent a graph as adjacency lists. I generate a maze than I apply BFS or Dijkstra for path finding.
The problems begin when I print the maze. The problem is that structure of a printed maze needs manual setup. What I mean by this is that I have to calculate the width `(rowBorder)` of the maze and print it row by row with three for loops:

``````for (size_t row = 0; row < graph.vertices(); row += graph.width())
{
const int rowBorder = row + graph.width();
for (int vertex = row; vertex < rowBorder; vertex++)
{
for (const auto& edge : graph.getAdjacencyList()[vertex])
{
//print stuff
}
}
}
``````

It happens because adjacency list has a linear structure. List of ALL nodes `std::vector<std::vector<Edge>>` and for every parent node I have set of nodes that parent node links to.

How can I represent an adjacency list with precalculated structure?
Maybe I should work with `std::vector<std::vector<std::vector<Edge>>>`?

Or maybe some better solutions?