An M-alternating chain is an *M-augmenting chain* if the end vertices are not on any edge of
M (i.e., are unsaturated).

If there is an M-augmenting chain in a graph, a larger matching can be obtained by "switching" the edges in this chain, i.e., remove from M the edges that are in the chain, and add to M the edges that are not in M. (There will be one more of these than the number you removed).

**Theorem**: A matching M in a graph is maximum if and only if the graph contains no M-augmenting
chains.

*Pf*: Clearly, a matching M is not maximum if there is an M-augmenting chain. We will prove the
theorem by showing that if M is not maximum then there is an M-augmenting chain in the graph.

Assume that there is a matching M' with |M'| > |M|. Let H be the subgraph consisting of all the vertices of the original graph and those edges that appear in either M or M' but not both. In H there are more M' edges than M edges by our assumption. Each vertex in H has degree at most 2 (in H), being on at most one edge of M and one edge of M'. The connected components of H are either circuits or simple chains, in which M and M' edges alternate. The circuits must have even length, and so, the same number of M and M' edges. Therefore, some component some component must be a simple chain with more M' edges than M edges, i.e., this component is an M-augmenting chain.

There are four lists that are maintained throughout the algorithm; two lists of vertices called O and I (standing for outer and inner vertices respectively) and two lists of edges called T and T' (the T edges will form a tree). Initialize all lists to be empty, then put x in list O.

*Step 1*: Find an edge not in T or T' with initial vertex in O.

- if this can not be done, then exit with message that there are no augmenting chains.

*Step 2*: If {u,v} is the edge found in Step 1 with u in O, then

a) if v is in I, put the edge in T' and return to Step 1, otherwise put the edge in T.

b) if v is unsaturated, stop the edges in T contain a unique augmenting chain from x to v.

c) if v is saturated, with edge {v,w} in M, then put v in I, w in O, the edge {v,w} in T and
return to Step 1.

**Example**: Consider this graph, having the indicated matching and unsaturated vertex 1.

We start with O = {1}, I = {}, T = {}, T' = {}.

Find edge {1,4} in Step 1. Since vertex 4 is saturated by edge {4,5} we update our lists to:

O = {1, 5}, I = {4}, T = { {1,4}, {4,5} }, T' = {}.
Find edge {1,2} in Step 1. Since vertex 2 is saturated by edge {2,3} we update our lists to:
O = {1, 5, 3}, I = {4, 2}, T = { {1,4}, {4,5}, {1,2}, {2,3} }, T' = {}.

Find edge {3,4} in Step 1. Since vertex 4 is in I, we update our lists to:

O = {1, 5, 3}, I = {4, 2}, T = { {1,4}, {4,5}, {1,2}, {2,3} }, T' = {{3,4}}.

Find edge {3,6} in Step 1. Since vertex 6 is saturated by edge {6,7} we update our lists to:

O = {1, 5, 3, 7}, I = {4, 2, 6}, T = { {1,4}, {4,5}, {1,2}, {2,3}, {3,6}, {6,7}}, T' = {{3,4}}.

Find edge {7,4} in Step 1. Since vertex 4 is in I, we update our lists to:

O = {1, 5, 3, 7}, I = {4, 2, 6}, T = {{1,4}, {4,5}, {1,2}, {2,3}, {3,6}, {6,7}}, T' = {{3,4},{7,4}}.

Find edge {7,8} in Step 1. Since vertex 8 is unsaturated, we find the unique chain in T from 1 to 8.

T = {{1,4}, {4,5}, {1,2}, {2,3}, {3,6}, {6,7}, {7,8}},

which is {1,2}, {2,3}, {3,6}, {6,7}, {7,8} an M-augmenting chain from 1 to 8.

If S is a subset of vertices of X, define the *deficiency of S* as d(S) = |S| - |N(S)|, and let the
*deficiency of G, d(G)* be the maximum of the deficiencies of all the subsets of X. Then,

**Theorem**: If G is a bipartite graph, m(G) = |X| - d(G).