Spanning Trees

Suppose a cable company must connect ten neighborhoods with fiber. It must use existing possible routes between them. The goal is laying the minimum number of cables. Every neighborhood must still reach every other. This is a spanning tree problem in disguise. It is one of the most useful structural questions in all of graph theory. A spanning tree records a "skeleton" of a connected graph. It is a minimal set of edges that keeps every vertex reachable from every other. No redundancy is left over. The idea matters because spanning trees separate a graph's connectivity from its redundancy. Every connected graph has one. The edges outside any fixed spanning tree partition naturally into two dual families. These are fundamental cycles (the redundant connections) and fundamental cutsets (the minimal disconnecting sets). Understanding these two families gives a complete combinatorial picture. It shows how a graph's cycle space and cut space are generated. It is the conceptual bridge between elementary Trees and Their Properties and the algorithmic machinery of minimum spanning trees. The big picture is that a connected graph on nn vertices always has a spanning tree with exactly n−1n-1 edges. Removing any edge of a spanning tree splits the vertex set into exactly two pieces (a fundamental cutset). Adding any non-tree edge back creates exactly one cycle (a fundamental cycle). These two operations are inverse to one another. Together they explain the full edge set of GG in terms of a single tree. This article gives the precise definitions. It proves existence of spanning trees and the correspondence between non-tree edges and fundamental cycles/cutsets. It works through two concrete examples. It shows where the hypotheses (connectivity, simplicity of choice of tree) can fail. It closes by pointing toward the quantitative side of the subject. This includes counting spanning trees (Cayley's Formula and Matrix-Tree Theorem) and choosing the "best" one (Minimum Spanning Trees and Algorithms).

Key takeaways
  • A spanning tree of a connected graph GG is a subgraph that is a tree and touches every vertex of GG.
  • Every connected graph on nn vertices has a spanning tree, and every spanning tree has exactly n−1n-1 edges.
  • Adding any edge not in a fixed spanning tree TT creates exactly one cycle: its fundamental cycle.
  • Removing any edge of TT splits the vertex set into two parts; the edges of GG crossing this split form a fundamental cutset.
  • The m−(n−1)m-(n-1) fundamental cycles and the n−1n-1 fundamental cutsets each form a basis for a natural vector space of edge sets over F2\mathbb{F}_2.
  • Key idea: a spanning tree is a minimal connected skeleton, and every edge outside it, or inside it, has a unique "signature" — a cycle or a cutset — that measures exactly how that edge relates to the rest of the graph.

Where this lives today

Spanning trees are the combinatorial backbone of network design: telecommunications, power grids, and transportation planning all reduce "connect everything as cheaply as possible" to a minimum spanning tree computation, building directly on the existence and structure results proved here. In computer networking, the Spanning Tree Protocol used in Ethernet bridging computes a spanning tree of the physical network topology to eliminate loops that would otherwise cause broadcast storms — a direct real-world instance of turning a connected graph with cycles into a loop-free skeleton. In circuit theory, following Kirchhoff, fundamental cutsets and fundamental cycles give precisely the right number of independent equations (Kirchhoff's voltage and current laws) to solve for currents and voltages in a resistor network, with the tree edges supplying the cutset equations and the chords supplying the cycle equations. In algebraic graph theory and coding theory, the fundamental cycles and cutsets are exactly a basis for the cycle space and cut space of the graph over F2\mathbb{F}_2, objects central to graphic matroid theory and to certain linear codes. In randomized algorithms and statistical physics, uniformly random spanning trees model phenomena in the study of electrical networks and loop-erased random walks, and their enumeration via the Matrix-Tree Theorem connects directly to determinants of graph Laplacians.

Ask the tutor: How do fundamental cycles and cutsets form dual bases of the cycle space and cut space of a graph over F2\mathbb{F}_2?

DefinitionSpanning Tree, Fundamental Cycle, Fundamental Cutset

Let G=(V,E)G = (V,E) be a finite, simple, connected graph with ∣V∣=n≥1|V| = n \geq 1. A spanning tree of GG is a subgraph T=(V,ET)T = (V, E_T) with ET⊆EE_T \subseteq E such that TT is a tree (connected and acyclic) and V(T)=VV(T) = V. Fix a spanning tree TT of GG. For each edge e=uv∈E∖ETe = uv \in E \setminus E_T (a non-tree edge, or chord), since TT is a tree there is a unique path PT(u,v)P_T(u,v) in TT from uu to vv Trees and Their Properties. The fundamental cycle of ee with respect to TT is

CT(e)=PT(u,v)∪{e}.C_T(e) = P_T(u,v) \cup \{e\}.

For each edge f∈ETf \in E_T (a tree edge), removing ff from TT disconnects TT into exactly two connected components with vertex sets AA and B=V∖AB = V \setminus A (proved below). The fundamental cutset of ff with respect to TT is

DT(f)={ xy∈E:x∈A, y∈B },D_T(f) = \{\, xy \in E : x \in A,\ y \in B \,\},

the set of all edges of GG (tree or non-tree) with one endpoint in each side of the split induced by ff.

Intuition

Picture a connected graph as a web of roads between towns. A spanning tree is a choice of a minimal set of roads to keep open so every town is still reachable from every other — no dead ends removed, but also no redundant loop left in. Since a tree on nn vertices always has exactly n−1n-1 edges, the spanning tree is a "cheapest possible skeleton" in terms of edge count, though not necessarily in terms of weight (that refinement is Minimum Spanning Trees and Algorithms). Once a skeleton TT is chosen, every other road in the original network — every edge not in TT — is redundant in a precise sense: it reconnects two towns that were already connected in TT, and doing so creates exactly one cycle, the fundamental cycle of that edge. Dually, every road in the skeleton is critical: removing it splits the whole town network into two disconnected halves, and the fundamental cutset records exactly which of the original roads (tree or not) reconnect those two halves.

Figure
A graph GG (solid + dashed edges), a spanning tree TT (solid edges), one fundamental cycle, and one fundamental cutset
a b c d e A = {a,e,d} B = {b,c} chord cd: fundamental cycle b–c–d–e–a–b solid = tree T; dashed red = chord; blue dotted = cut at edge ab

Central results

TheoremExistence, Order, and the Fundamental Cycle/Cutset Correspondence

Let G=(V,E)G = (V,E) be a finite, simple, connected graph with n=∣V∣≥1n = |V| \geq 1 vertices and m=∣E∣m = |E| edges. 1. (Existence.) GG has a spanning tree. 2. (Edge count.) Every spanning tree of GG has exactly n−1n-1 edges, and m≥n−1m \geq n-1. 3. (Fundamental cycles.) Fix a spanning tree TT. For every non-tree edge e∈E∖ETe \in E \setminus E_T, the fundamental cycle CT(e)C_T(e) is a cycle of GG, it is the unique cycle contained in ET∪{e}E_T \cup \{e\}, and ee is the unique non-tree edge appearing in CT(e)C_T(e). 4. (Fundamental cutsets.) Fix a spanning tree TT. For every tree edge f∈ETf \in E_T, deleting ff from TT splits TT's vertex set into exactly two nonempty parts A,BA, B; the fundamental cutset DT(f)D_T(f) consists of exactly the edges of GG joining AA to BB, it is a minimal edge set whose removal disconnects GG, and ff is the unique tree edge in DT(f)D_T(f).

Proof

We prove each part in turn, using induction and direct combinatorial argument (no circular appeal to later machinery).

(1) Existence. Induct on mm, the number of edges, for connected graphs on a fixed vertex set. If GG itself is acyclic, then a connected acyclic graph is by definition a tree Trees and Their Properties, so T=GT = G is a spanning tree. Otherwise GG contains a cycle CC; let ee be any edge of CC. We claim G−eG - e (delete ee, keep all vertices) is still connected. Indeed, take any two vertices u,w∈Vu,w \in V and a walk between them in GG; if the walk uses e=xye = xy, replace that use of ee by the path C−eC - e from xx to yy (which exists since CC is a cycle and removing one edge from a cycle leaves a path connecting its endpoints); the resulting walk avoids ee. Hence G−eG-e is connected, has the same vertex set VV, and has m−1m-1 edges. By the induction hypothesis (base case m=n−1m = n-1 with GG already a tree, handled above), G−eG - e has a spanning tree, and this is also a spanning tree of GG since it uses only edges of GG and spans VV. This completes the induction.

(2) Edge count. This is a direct restatement of the basic fact that a tree on nn vertices has exactly n−1n - 1 edges Trees and Their Properties, applied to any spanning tree TT, which is a tree with ∣V(T)∣=n|V(T)| = n. Since ET⊆EE_T \subseteq E, we get m=∣E∣≥∣ET∣=n−1m = |E| \geq |E_T| = n - 1.

(3) Fundamental cycles. Fix e=uv∉ETe = uv \notin E_T. Since TT is a tree, there is a unique uu–vv path PP in TT (uniqueness of paths in trees is a basic property Trees and Their Properties); since e∉ETe \notin E_T, PP does not use ee, so PP together with ee forms a closed walk visiting each of its vertices once — a cycle CT(e)=P∪{e}C_T(e) = P \cup \{e\}, contained in ET∪{e}E_T \cup \{e\}. Uniqueness of the cycle inside ET∪{e}E_T \cup \{e\}: Suppose C′C' is any cycle contained in ET∪{e}E_T \cup \{e\}. If C′C' used no edges outside ETE_T, then C′C' would be a cycle inside the tree TT, contradicting acyclicity of TT. So C′C' must use ee (the only edge of ET∪{e}E_T\cup\{e\} outside ETE_T). Removing ee from C′C' leaves a uu–vv path using only tree edges, i.e. a uu–vv path in TT. By uniqueness of paths in the tree TT, this path equals PP. Hence C′=P∪{e}=CT(e)C' = P \cup \{e\} = C_T(e), proving uniqueness. Uniqueness of the chord in CT(e)C_T(e): By construction, CT(e)∖{e}=P⊆ETC_T(e) \setminus \{e\} = P \subseteq E_T, so ee is the only edge of CT(e)C_T(e) outside ETE_T, i.e. the only non-tree edge in the cycle.

(4) Fundamental cutsets. Fix f∈ETf \in E_T. Since TT is a tree, T−fT - f (delete edge ff, keep all vertices) is disconnected into exactly two components: removing any single edge from a tree always yields exactly two components, because a tree has n−1n-1 edges and is minimally connected — deleting one edge lowers the edge count to n−2n - 2, and a graph with nn vertices and n−2n-2 edges that is a forest (subgraph of a tree, hence acyclic) with cc components satisfies n−2=n−cn - 2 = n - c (edge count of a forest Trees and Their Properties), forcing c=2c = 2. Let A,BA, B be the vertex sets of these two components; A,BA, B partition VV, both nonempty since ff had two distinct endpoints landing one in each part (the endpoints of ff are separated by its removal, as ff was the unique tree path between them). By definition, DT(f)D_T(f) is exactly the set of GG-edges with one endpoint in AA and one in BB. Minimality (disconnects GG, and no proper subset does): Removing all of DT(f)D_T(f) from GG leaves no edges between AA and BB, so G−DT(f)G - D_T(f) has no AA–BB path, hence is disconnected (as A,BA,B are both nonempty). Now let D′⊊DT(f)D' \subsetneq D_T(f) be any proper subset; we show G−D′G - D' is still connected, establishing minimality. Since D′≠DT(f)D' \neq D_T(f), some edge g∈DT(f)∖D′g \in D_T(f) \setminus D' survives in G−D′G - D', and gg crosses from AA to BB. Take any x,y∈Vx, y \in V. If both lie in AA: since AA is the vertex set of a connected component of T−fT - f, there is a tree path between them entirely inside AA, hence entirely surviving in G−D′G - D' (tree edges within AA are not in DT(f)D_T(f), as they have both endpoints in AA). Symmetric argument if both lie in BB. If x∈A,y∈Bx \in A, y \in B, route xx to an endpoint of gg in AA via tree edges inside AA, cross gg, then route to yy inside BB via tree edges. In every case G−D′G - D' has an xx–yy walk, so G−D′G-D' is connected. Hence DT(f)D_T(f) is a minimal disconnecting set — a genuine cutset. Uniqueness of the tree edge in DT(f)D_T(f): Any tree edge f′∈ETf' \in E_T with f′∈DT(f)f' \in D_T(f) must cross from AA to BB. But AA and BB are exactly the two components of T−fT - f; the only tree edge crossing between them is ff itself, since all other tree edges lie within one component (they connect two vertices already joined by a path avoiding ff, so both endpoints are in the same component of T−fT-f). Hence f′=ff' = f, proving uniqueness. ■\blacksquare

∎

Worked examples

Example 1 (asymmetric graph, six vertices). Let V={1,2,3,4,5,6}V = \{1,2,3,4,5,6\} and

E={12,13,23,24,45,46,56,35}.E = \{12, 13, 23, 24, 45, 46, 56, 35\}.

This graph has n=6n = 6 vertices and m=8m = 8 edges. Check connectivity: 11–22–33–11 form a triangle, 22–44–55–66–44 form a 4-cycle attached at 44, and 33–55 is an extra chord linking the two blocks. All six vertices are reachable from 11, so GG is connected. Choose the spanning tree

ET={12,13,24,45,46}.E_T = \{12, 13, 24, 45, 46\}.

This has 5=n−15 = n - 1 edges and one checks directly it is acyclic and connects all of 1,…,61,\dots,6 (draw it: 11 attaches to 2,32,3; 22 attaches to 44; 44 attaches to 5,65,6). So TT is a valid spanning tree, matching part (2) of the theorem. The non-tree edges are E∖ET={23,56,35}E \setminus E_T = \{23, 56, 35\}, and m−(n−1)=8−5=3m - (n-1) = 8 - 5 = 3, consistent. Fundamental cycle of 2323: the tree path from 22 to 33 is 22–11–33 (using edges 12,1312,13). So

CT(23)={23,12,13},C_T(23) = \{23, 12, 13\},

the triangle 11–22–33–11. Check: this is indeed a cycle of GG, and 2323 is its only non-tree edge. Fundamental cycle of 5656: the tree path from 55 to 66 is 55–44–66 (edges 45,4645, 46). So

CT(56)={56,45,46},C_T(56) = \{56, 45, 46\},

the triangle 44–55–66–44. Fundamental cycle of 3535: the tree path from 33 to 55 is 33–11–22–44–55 (edges 13,12,24,4513,12,24,45). So

CT(35)={35,13,12,24,45},C_T(35) = \{35, 13, 12, 24, 45\},

a 5-cycle 11–33–55–44–22–11. Note this cycle passes through four tree edges but only one non-tree edge, exactly as the theorem guarantees. Fundamental cutset of tree edge 2424: remove 2424 from TT; the two components of T−24T - 24 are A={1,2,3}A = \{1,2,3\} (edges 12,1312,13 remain) and B={4,5,6}B = \{4,5,6\} (edges 45,4645,46 remain). The fundamental cutset is all GG-edges between AA and BB:

DT(24)={24,35},D_T(24) = \{24, 35\},

since 2424 crosses (as designed) and 3535 crosses (3∈A3 \in A, 5∈B5\in B); no other edge of EE crosses (12,13,2312,13,23 lie inside AA; 45,46,5645,46,56 lie inside BB). Removing both 2424 and 3535 from GG indeed disconnects {1,2,3}\{1,2,3\} from {4,5,6}\{4,5,6\}, and removing only one of them leaves the graph connected — confirming minimality.

Example 2 (a graph where a naive edge choice fails, showing why "any n−1n-1 edges" is not enough). Let V={1,2,3,4,5}V = \{1,2,3,4,5\} and

E={12,23,34,45,15,13}.E = \{12,23,34,45,15,13\}.

This is a 5-cycle 11–22–33–44–55–11 plus one chord 1313; n=5n=5, m=6m=6. Take the edge set E′={12,23,34,45}E' = \{12, 23, 34, 45\}: this has n−1=4n - 1 = 4 edges and spans all vertices, but it is not a spanning tree — it is itself a path, which happens to be acyclic and connected here, so actually it is a valid spanning tree (a coincidence of this small example). To illustrate a genuine failure, instead take E′′={12,23,13,45}E'' = \{12, 23, 13, 45\}: also 4=n−14 = n-1 edges, touches all five vertices, but {12,23,13}\{12,23,13\} forms a triangle (a cycle), so E′′E'' is not acyclic and hence not a tree at all — vertex set {4,5}\{4,5\} is also disconnected from {1,2,3}\{1,2,3\} since the only edge touching 44 or 55 is 4545 itself, so E′′E'' is neither connected nor acyclic. This shows that having exactly n−1n-1 edges spanning all vertices does not by itself guarantee a spanning tree: one must independently verify connectivity, or independently verify acyclicity, and only having both (or, more efficiently, having one of the two plus the correct edge count, as we prove next) suffices.

LemmaTwo equivalent tests for a spanning tree with the right edge count

Let G=(V,E)G=(V,E) be connected, n=∣V∣n = |V|, and let F⊆EF \subseteq E with ∣F∣=n−1|F| = n-1. Then (V,F)(V,F) is a spanning tree of GG if and only if (V,F)(V,F) is connected, and if and only if (V,F)(V,F) is acyclic.

Proof

(⇒\Rightarrow) If (V,F)(V,F) is a spanning tree it is by definition connected and acyclic; both directions are immediate. (⇐\Leftarrow, connected case) Suppose (V,F)(V,F) is connected with ∣F∣=n−1|F| = n - 1. If (V,F)(V,F) had a cycle, deleting one edge of that cycle would keep it connected (same argument as in the Existence proof of the theorem) while leaving n−2n-2 edges spanning nn vertices — but a connected graph on nn vertices needs at least n−1n-1 edges (this follows by induction: a connected graph with cc components and nn vertices, viewed after removing edges from cycles repeatedly until acyclic, needs at least n−cn - c edges, and c=1c=1 here forces at least n−1n-1; formally this is the same edge-counting fact used for forests in part (2) of the theorem). This contradicts having only n−2n-2 edges. So (V,F)(V,F) is acyclic, hence a tree, hence a spanning tree. (⇐\Leftarrow, acyclic case) Suppose (V,F)(V,F) is acyclic with ∣F∣=n−1|F| = n-1 vertices. An acyclic graph is a forest, so if it had cc components its edge count equals n−cn - c (forest edge-count fact, Trees and Their Properties). Since ∣F∣=n−1=n−c|F| = n - 1 = n - c, we get c=1c = 1, i.e. (V,F)(V,F) is connected. Hence it is connected and acyclic, i.e. a tree, hence a spanning tree. ■\blacksquare

∎

This lemma is exactly why the failed set E′′E'' above could not be salvaged: it had the right count n−1=4n-1=4 but was neither connected nor acyclic, and the lemma shows these two properties are equivalent given the count — so checking either one (not both) suffices, but checking neither is not enough.

Why connectivity is essential

CounterexampleDropping connectivity of GG

The existence claim (part 1 of the theorem) requires GG to be connected. Consider GG with V={1,2,3,4}V = \{1,2,3,4\} and E={12,34}E = \{12, 34\} — two disjoint edges, forming two separate components {1,2}\{1,2\} and {3,4}\{3,4\}. This GG is not connected. There is no spanning tree of GG: any subgraph T=(V,ET)T=(V,E_T) with ET⊆EE_T \subseteq E that is connected on all of V={1,2,3,4}V = \{1,2,3,4\} would need a path between 11 and 33, say, but EE contains no edge joining {1,2}\{1,2\} to {3,4}\{3,4\}, so no such path exists in any subgraph of GG. Hence no spanning tree exists, exactly as the (necessary) connectivity hypothesis predicts. What one gets instead, when GG has c≥2c \geq 2 components, is a spanning forest: choosing a spanning tree independently inside each component yields a maximal acyclic subgraph of GG with n−cn - c edges total (matching the forest edge-count formula). This is the natural generalization, but it is not a single spanning tree, and the fundamental-cycle/fundamental-cutset correspondence must then be applied component by component — there is no single tree path between vertices in different components, so the very definition of "fundamental cycle of a non-tree edge" collapses for edges that do not exist in a disconnected GG to begin with. This shows connectivity of GG cannot be dropped from the existence theorem.

Scope, edge cases & common traps

SituationWhat happensWhy
GG connected, n=1n=1The single vertex with no edges is (vacuously) a spanning treeA tree on 11 vertex has 0=n−10 = n-1 edges
GG disconnectedNo spanning tree exists; use a spanning forest insteadProved in the counterexample above
GG already a treeThe unique spanning tree is GG itselfNo edges to remove without disconnecting
GG has multiple spanning treesDifferent choices of TT give different fundamental cycles/cutsets for the same graphOnly the total counts (m−n+1m-n+1 cycles, n−1n-1 cutsets) are invariant, not the individual sets
Multigraphs / parallel edgesDefinitions extend verbatim; a fundamental cycle can have length 22 (a parallel edge pair)Uniqueness of tree paths still holds since TT is simple
Weighted graphsSpanning tree existence and fundamental cycle/cutset facts ignore weights entirelyWeight only matters for choosing a best tree, see Minimum Spanning Trees and Algorithms

The mathematician behind it

Origins · 1 minGustav Robert Kirchhoff and how this was discovered
GR
Gustav Robert Kirchhoff
1824–1887 · 19th-century Prussian physics and graph theory

Kirchhoff is best known to physicists for his laws of electrical circuits, but in an 1847 paper he needed to solve a purely combinatorial problem: given a network of resistors, how many independent loop equations and independent node equations does one need? His answer was, in modern language, exactly the fundamental cycle and fundamental cutset structure induced by a spanning tree of the circuit graph. This makes Kirchhoff arguably the first person to use spanning trees as a systematic tool, well before "graph theory" existed as a named subject.

History
- 1847 — Kirchhoff analyzes electrical networks using what are now recognized as spanning trees, fundamental cycles, and fundamental cutsets, to reduce Kirchhoff's circuit laws to an independent set of equations.
- 1857 — Arthur Cayley studies trees combinatorially while enumerating chemical isomers of saturated hydrocarbons, developing tree-counting methods that later connect to spanning tree enumeration.
- 1889 — Cayley states the formula for the number of labeled trees on nn vertices (foreshadowing Cayley's Formula and Matrix-Tree Theorem), a special case of counting all spanning trees of the complete graph KnK_n.
- 1900s–1930s — the general Matrix-Tree Theorem, giving the number of spanning trees of any graph via a determinant, is developed, generalizing Kirchhoff's original circuit-theoretic computation.
- 1956 — Kruskal and (independently, 1957) Prim publish greedy algorithms for finding a minimum-weight spanning tree, launching the algorithmic side of the theory that spanning trees make possible.
Does every connected graph have a unique spanning tree?

No, in general not. Uniqueness fails as soon as GG has any cycle: any edge of that cycle can be excluded while the rest of a spanning tree is completed in more than one way, so multiple distinct spanning trees typically exist. The complete graph KnK_n for n≥3n \geq 3, for instance, has many spanning trees — the exact count is nn−2n^{n-2} by Cayley's Formula and Matrix-Tree Theorem. A connected graph has a unique spanning tree only in the degenerate case where GG is already a tree itself (then GG has no cycles to break, and T=GT = G is forced), or trivially when n≤2n \le 2.

Is the number of fundamental cycles always the same, regardless of which spanning tree is chosen?

Yes. If GG has nn vertices and mm edges, then any spanning tree has n−1n-1 edges, so the number of non-tree edges — and hence the number of fundamental cycles — is always exactly m−(n−1)=m−n+1m - (n-1) = m-n+1. This quantity is called the circuit rank (or cyclomatic number) of GG, and it is a graph invariant independent of which spanning tree is used, even though the individual fundamental cycles themselves do depend on the choice of TT.

How do fundamental cutsets relate to edge connectivity?

Each fundamental cutset DT(f)D_T(f) is a set of edges that disconnects GG when removed, but it need not be a minimum cutset in size. The edge connectivity of GG (the smallest number of edges whose removal disconnects GG) is at most min⁡f∣DT(f)∣\min_f |D_T(f)| over the fundamental cutsets of any fixed tree TT, since every fundamental cutset is some disconnecting set, but there could be a smaller disconnecting set that is not of this "single split induced by one tree edge" form. So fundamental cutsets always witness disconnection but do not always achieve the minimum possible cutset size.

Do fundamental cycles and fundamental cutsets have any special relationship to each other?

Yes — they are combinatorially dual. A theorem of graph theory (beyond this article's scope to prove in full) states that a fundamental cycle CT(e)C_T(e) and a fundamental cutset DT(f)D_T(f) intersect in an even number of edges whenever e≠fe \ne f come from possibly different roles, and in exactly the edges {e,f}\{e,f\}-type overlaps governed by whether ff lies on the tree path defining CT(e)C_T(e). Precisely, f∈ETf \in E_T lies on the fundamental cycle CT(e)C_T(e) if and only if the chord ee lies in the fundamental cutset DT(f)D_T(f). This duality is foundational in matroid theory, where cycles and cutsets of a graph correspond to circuits and cocircuits of the associated graphic matroid.

Can a spanning tree be found efficiently, and does the theorem's proof give an algorithm?

Yes. The inductive proof of existence — repeatedly find a cycle and delete one of its edges — directly gives an O(nm)O(nm)-style "tree by deletion" algorithm, though it's not the most efficient in practice. Much faster in practice are "tree by growth" algorithms: breadth-first search or depth-first search from any vertex, adding each newly-discovered vertex's connecting edge to the tree, run in O(n+m)O(n+m) time. Both approaches produce some spanning tree; choosing one of minimum total weight when edges carry weights requires the additional machinery of Minimum Spanning Trees and Algorithms (Kruskal's or Prim's algorithm).

Why does the proof of existence not just say "obviously a connected graph has a spanning tree"?

Because the point of a rigorous treatment is to reduce the claim to previously established facts about trees, rather than assert it. The proof given here reduces existence to the elementary fact that deleting one edge of any cycle preserves connectivity, combined with an induction on the number of edges, bottoming out at the case where GG is already acyclic (hence already a tree by the definition of tree as connected + acyclic). Every step used only Trees and Their Properties and basic connectivity arguments, with no appeal to any spanning-tree-dependent machinery — this avoids circularity.

What happens to fundamental cycles and cutsets if GG has parallel edges or loops (as a multigraph)?

If GG is a multigraph with parallel edges between the same pair of vertices, everything in this article still applies verbatim as long as the spanning tree TT is simple (which it automatically is, being a tree). A fundamental cycle can then have length exactly 22: if u,vu,v are joined by two parallel edges e1e_1 (in TT) and e2e_2 (a chord), then CT(e2)={e1,e2}C_T(e_2) = \{e_1, e_2\} is a genuine 2-edge cycle. Loops (edges from a vertex to itself) are typically excluded from the definition of simple graph and are not meaningfully part of any spanning tree, since a tree by definition has no cycles, including the trivial cycle formed by a loop.

Before this

Where this leads