# Construct multiple graphs from sparse adjacency matrix

**URL:** <https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256>\
**Category:** Graphs\
**Tags:** question, graphs\
**Created:** [November 29, 2021, 7:36pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256 "2021-11-29T19:36:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![markmbaum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markmbaum/32/32745_2.png) [@markmbaum](https://discourse.julialang.org/u/markmbaum)\
**Post date:** [November 29, 2021, 7:36pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256/1 "2021-11-29T19:36:43Z")

</div>

I have a sparse adjacency matrix (`SparseMatrixCSC`) representing connections between the elements of a collection. I see that I can neatly convert it to a graph with the `Graph` constructor from [`Graphs.jl`](https://github.com/JuliaGraphs/Graphs.jl).

However, I know that the connections represent many smaller, unconnected graphs.

Is there a way to create multiple graphs representing the distinct networks or to split the single graph after calling `Graph` on the matrix?

I’ve been looking through the [docs](https://juliagraphs.org/Graphs.jl/dev/) for a bit but I’m not finding a solution.

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [November 29, 2021, 8:32pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256/2 "2021-11-29T20:32:22Z")

</div>

Connected components is probably what you’re looking for. Looks like `Graphs.jl` supports it for undirected graphs.

In the adjacency matrix are the vertices in one graph mixed with another along the axis? Or is it something like `A[1:5, 1:5]` is the first graph, `A[5:10, 5:10]` is the second etc.

---

<div class="post-metadata">

**Author:** ![markmbaum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markmbaum/32/32745_2.png) [@markmbaum](https://discourse.julialang.org/u/markmbaum)\
**Post date:** [November 29, 2021, 8:33pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256/3 "2021-11-29T20:33:23Z")

</div>

The vertices are all mixed through the adjacency matrix, unfortunately, so the graphs aren’t neat blocks.

---

<div class="post-metadata">

**Author:** ![rayegun](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rayegun/32/26729_2.png) [@rayegun](https://discourse.julialang.org/u/rayegun)\
**Post date:** [November 29, 2021, 8:37pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256/4 "2021-11-29T20:37:44Z")

</div>

So then the connected components functionality is probably what you want. [Graph Algorithms — Graphs.jl 0.3 documentation](https://graphsjl-docs.readthedocs.io/en/latest/algorithms.html#connected_components)

---

<div class="post-metadata">

**Author:** ![markmbaum](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/markmbaum/32/32745_2.png) [@markmbaum](https://discourse.julialang.org/u/markmbaum)\
**Post date:** [November 29, 2021, 8:38pm UTC](https://discourse.julialang.org/t/construct-multiple-graphs-from-sparse-adjacency-matrix/72256/5 "2021-11-29T20:38:26Z")

</div>

Yes, seems like it’s exactly what I’m looking for. Thanks! I guess I just didn’t stumble onto the correct part of the docs.
