# Graph (discrete mathematics)

In mathematics, and more specifically in graph theory, a **graph** is a structure amounting to a set of objects in which some pairs of the objects are in some sense "related". The objects correspond to mathematical abstractions called *vertices* (also called *nodes* or *points*) and each of the related pairs of vertices is called an *edge* (also called *link* or *line*).^{[1]} Typically, a graph is depicted in diagrammatic form as a set of dots or circles for the vertices, joined by lines or curves for the edges. Graphs are one of the objects of study in discrete mathematics.

The edges may be directed or undirected. For example, if the vertices represent people at a party, and there is an edge between two people if they shake hands, then this graph is undirected because any person *A* can shake hands with a person *B* only if *B* also shakes hands with *A*. In contrast, if any edge from a person *A* to a person *B* corresponds to *A* owes money to *B*, then this graph is directed, because owing money is not necessarily reciprocated.

Graphs are the basic subject studied by graph theory. The word "graph" was first used in this sense by J. J. Sylvester in 1878 in a direct relation between mathematics and chemical structure (what he called chemico-graphical image).^{[2]}^{[3]}

Definitions in graph theory vary. The following are some of the more basic ways of defining graphs and related mathematical structures.

A **graph** (sometimes called *undirected graph* for distinguishing from a directed graph, or *simple graph* for distinguishing from a multigraph)^{[4]}^{[5]} is a pair *G* = (*V*, *E*), where V is a set whose elements are called *vertices* (singular: vertex), and E is a set of paired vertices, whose elements are called *edges* (sometimes *links* or *lines*).

A multigraph is a generalization that allows multiple edges to have the same pair of endpoints. In some texts, multigraphs are simply called graphs.^{[6]}^{[7]}

Sometimes, graphs are allowed to contain *loops*, which are edges that join a vertex to itself. For allowing loops, the above definition must be changed by defining edges as multisets of two vertices instead of two-sets. Such generalized graphs are called *graphs with loops* or simply *graphs* when it is clear from the context that loops are allowed.

Generally, the set of vertices *V* is supposed to be finite; this implies that the set of edges is also finite. Infinite graphs are sometimes considered, but are more often viewed as a special kind of binary relation, as most results on finite graphs do not extend to the infinite case, or need a rather different proof.

An empty graph is a graph that has an empty set of vertices (and thus an empty set of edges). The *order* of a graph is its number of vertices |*V*|. The *size* of a graph is its number of edges |*E*|. However, in some contexts, such as for expressing the computational complexity of algorithms, the size is |*V*| + |*E*| (otherwise, a non-empty graph could have a size 0). The *degree* or *valency* of a vertex is the number of edges that are incident to it; for graphs ^{[1]}with loops, a loop is counted twice.

In a graph of order *n*, the maximum degree of each vertex is *n* − 1 (or *n* if loops are allowed), and the maximum number of edges is *n*(*n* − 1)/2 (or *n*(*n* + 1)/2 if loops are allowed).

A **directed graph** or **digraph** is a graph in which edges have orientations.

To avoid ambiguity, this type of object may be called precisely a **directed simple graph**.

To avoid ambiguity, this type of object may be called precisely a **directed multigraph**.

A *mixed graph* is a graph in which some edges may be directed and some may be undirected. It is an ordered triple *G* = (*V*, *E*, *A*) for a *mixed simple graph* and *G* = (*V*, *E*, *A*, *ϕ*_{E}, *ϕ*_{A}) for a *mixed multigraph* with *V*, *E* (the undirected edges), *A* (the directed edges), *ϕ*_{E} and *ϕ*_{A} defined as above. Directed and undirected graphs are special cases.

A *weighted graph* or a *network*^{[9]}^{[10]} is a graph in which a number (the weight) is assigned to each edge.^{[11]} Such weights might represent for example costs, lengths or capacities, depending on the problem at hand. Such graphs arise in many contexts, for example in shortest path problems such as the traveling salesman problem.

One definition of an *oriented graph* is that it is a directed graph in which at most one of (*x*, *y*) and (*y*, *x*) may be edges of the graph. That is, it is a directed graph that can be formed as an orientation of an undirected (simple) graph.

Some authors use "oriented graph" to mean the same as "directed graph". Some authors use "oriented graph" to mean any orientation of a given undirected graph or multigraph.

A *regular graph* is a graph in which each vertex has the same number of neighbours, i.e., every vertex has the same degree. A regular graph with vertices of degree *k* is called a *k*‑regular graph or regular graph of degree *k*.

A *complete graph* is a graph in which each pair of vertices is joined by an edge. A complete graph contains all possible edges.

A *finite graph* is a graph in which the vertex set and the edge set are finite sets. Otherwise, it is called an *infinite graph*.

Most commonly in graph theory it is implied that the graphs discussed are finite. If the graphs are infinite, that is usually specifically stated.

A *connected graph* is an undirected graph in which every unordered pair of vertices in the graph is connected. Otherwise, it is called a *disconnected graph*.

In a directed graph, an ordered pair of vertices (*x*, *y*) is called *strongly connected* if a directed path leads from *x* to *y*. Otherwise, the ordered pair is called *weakly connected* if an undirected path leads from *x* to *y* after replacing all of its directed edges with undirected edges. Otherwise, the ordered pair is called *disconnected*.

A *strongly connected graph* is a directed graph in which every ordered pair of vertices in the graph is strongly connected. Otherwise, it is called a *weakly connected graph* if every ordered pair of vertices in the graph is weakly connected. Otherwise it is called a *disconnected graph*.

A *k-vertex-connected graph* or *k-edge-connected graph* is a graph in which no set of *k* − 1 vertices (respectively, edges) exists that, when removed, disconnects the graph. A *k*-vertex-connected graph is often called simply a *k-connected graph*.

A *bipartite graph* is a simple graph in which the vertex set can be partitioned into two sets, *W* and *X*, so that no two vertices in *W* share a common edge and no two vertices in *X* share a common edge. Alternatively, it is a graph with a chromatic number of 2.

In a complete bipartite graph, the vertex set is the union of two disjoint sets, *W* and *X*, so that every vertex in *W* is adjacent to every vertex in *X* but there are no edges within *W* or *X*.

A *planar graph* is a graph whose vertices and edges can be drawn in a plane such that no two of the edges intersect.

A *tree* is an undirected graph in which any two vertices are connected by *exactly one* path, or equivalently a connected acyclic undirected graph.

A *forest* is an undirected graph in which any two vertices are connected by *at most one* path, or equivalently an acyclic undirected graph, or equivalently a disjoint union of trees.

A *polytree* (or *directed tree* or *oriented tree* or *singly connected network*) is a directed acyclic graph (DAG) whose underlying undirected graph is a tree.

A *polyforest* (or *directed forest* or *oriented forest*) is a directed acyclic graph whose underlying undirected graph is a forest.

Two edges of a graph are called *adjacent* if they share a common vertex. Two edges of a directed graph are called *consecutive* if the head of the first one is the tail of the second one. Similarly, two vertices are called *adjacent* if they share a common edge (*consecutive* if the first one is the tail and the second one is the head of an edge), in which case the common edge is said to *join* the two vertices. An edge and a vertex on that edge are called *incident*.

The graph with only one vertex and no edges is called the *trivial graph*. A graph with only vertices and no edges is known as an *edgeless graph*. The graph with no vertices and no edges is sometimes called the *null graph* or *empty graph*, but the terminology is not consistent and not all mathematicians allow this object.

Normally, the vertices of a graph, by their nature as elements of a set, are distinguishable. This kind of graph may be called *vertex-labeled*. However, for many questions it is better to treat vertices as indistinguishable. (Of course, the vertices may be still distinguishable by the properties of the graph itself, e.g., by the numbers of incident edges.) The same remarks apply to edges, so graphs with labeled edges are called *edge-labeled*. Graphs with labels attached to edges or vertices are more generally designated as *labeled*. Consequently, graphs in which vertices are indistinguishable and edges are indistinguishable are called *unlabeled*. (In the literature, the term *labeled* may apply to other kinds of labeling, besides that which serves only to distinguish different vertices or edges.)

The category of all graphs is the comma category Set ↓ *D* where *D*: Set → Set is the functor taking a set *s* to *s* × *s*.

There are several operations that produce new graphs from initial ones, which might be classified into the following categories:

An undirected graph can be seen as a simplicial complex consisting of 1-simplices (the edges) and 0-simplices (the vertices). As such, complexes are generalizations of graphs since they allow for higher-dimensional simplices.

In model theory, a graph is just a structure. But in that case, there is no limitation on the number of edges: it can be any cardinal number, see continuous graph.

In computational biology, power graph analysis introduces power graphs as an alternative representation of undirected graphs.

In geographic information systems, geometric networks are closely modeled after graphs, and borrow many concepts from graph theory to perform spatial analysis on road networks or utility grids.