> For the complete documentation index, see [llms.txt](https://ondrej-kvasnovsky-2.gitbook.io/algorithms/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ondrej-kvasnovsky-2.gitbook.io/algorithms/data-structures/graph.md).

# Graph

Graphs are usually stored in two ways - in a metric or in a set of nodes where each item has a references to a node it is connected with. Nice summary is in this [video](https://www.youtube.com/watch?v=WQ2Tzlxl_Xo).

## Adjacency Matrix

Directed graph. ![](/files/-M3wYiLaTFtmcaGvU_1I)

```
```

For undirected graph, we can keep only one side of matrix (upper or lower).![](/files/-M3wYiLc9mEn8rt2htxI)

```
```

Directed weighted graph. ![](/files/-M3wYiLerOdSrUXzt2IZ)

```
```

## Adjacency List

Directed graph (we can store incoming or out-coming edges). ![](/files/-M3wYiLghaE7q-ic3FeX)

```
```

Undirected graph, each edge is stored twice.![](/files/-M3wYiLi-Xm86N6iPL6E)

```
```

Adjacency matrix is bad for sparse graphs and good for dense graphs. The opposite of adjacency list.
