Function Repository Resource:

ArticulationVertices

Source Notebook

Find articulation vertices of a graph

Contributed by: Wolfram Staff (original content by Sriram V. Pemmaraju and Steven S. Skiena)

ResourceFunction["ArticulationVertices"][g]

gives a list of all articulation vertices in graph g.

Details and Options

Articualtion vertices (or articulation points) are vertices whose removal disconnects the graph.
For directed or mixed graphs, ResourceFunction["ArticulationVertices"][g] is equivalent to ResourceFunction["ArticulationVertices"][UndirectedGraph[g]].

Examples

Basic Examples (3) 

The only articulation vertex of a star is its center:

In[1]:=
ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5, 6, 7, 8}, {Null, 
SparseArray[
         Automatic, {8, 8}, 0, {1, {{0, 7, 8, 9, 10, 11, 12, 13, 14}, {{2}, {3}, {4}, {
            5}, {6}, {7}, {8}, {1}, {1}, {1}, {1}, {1}, {1}, {1}}}, Pattern}]}, {GraphLayout -> "StarEmbedding", VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{0., 0.}, {-0.9749279121818235, -0.22252093395631342`}}, {{0., 0.}, {-0.43388373911755757`, -0.9009688679024187}}, {{0., 0.}, {0.43388373911755884`, -0.9009688679024196}}, {{0., 0.}, {0.9749279121818237, -0.2225209339563155}}, {{0., 0.}, {0.7818314824680294, 0.6234898018587327}}, {{0., 0.}, {-7.044813998280222*^-16, 1.}}, {{0., 0.}, {-0.7818314824680302, 0.6234898018587351}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {DiskBox[{0., 0.}, 0.02220329551621769], InsetBox["1", {0.013487108431032097, 0.02800626923492932}, ImageScaled[{0.17458719566183128, -0.17572665092681428}],
BaseStyle->"Graphics"]}, {
           DiskBox[{-0.9749279121818235, -0.22252093395631342}, 0.02220329551621769], InsetBox["2", {-1.0052331697394785, -0.22943791123356091}, ImageScaled[{1.2311959341363679, 0.666890700467235}],
BaseStyle->"Graphics"]}, {
           DiskBox[{-0.43388373911755757, -0.9009688679024187}, 0.02220329551621769], InsetBox["3", {-0.4473708475485897, -0.928975137137348}, ImageScaled[{0.8254128043381688, 1.1757266509268143}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.43388373911755884, -0.9009688679024196}, 0.02220329551621769], InsetBox["4", {0.4473708475485909, -0.9289751371373489}, ImageScaled[{0.17458719566183167, 1.1757266509268145}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.9749279121818237, -0.2225209339563155}, 0.02220329551621769], InsetBox["5", {1.0052331697394787, -0.22943791123356308}, ImageScaled[{-0.2311959341363674, 0.6668907004672373}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.7818314824680294, 0.6234898018587327}, 0.02220329551621769], InsetBox["6", {0.8061344120967977, 0.6428707415095571}, ImageScaled[{-0.08637361185102255, 0.03238264860595019}],
BaseStyle->"Graphics"]}, {
           DiskBox[{-7.044813998280222*^-16, 1.}, 0.02220329551621769], InsetBox["7", {-7.251144129583054*^-16, 1.0310846137227048},
             ImageScaled[{0.5000000000000006, -0.25}],
BaseStyle->"Graphics"]}, {
           DiskBox[{-0.7818314824680302, 0.6234898018587351}, 0.02220329551621769], InsetBox["8", {-0.8061344120967986, 0.6428707415095596}, ImageScaled[{1.0863736118510219, 0.032382648605949194}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[1]=

All vertices of a path, except the end vertices, are articulation vertices:

In[2]:=
ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5}, {Null, {{1, 2}, {2, 3}, {3, 4}, {4, 5}}}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{0., 7.347880794884119*^-16}, {1., 6.123233995736766*^-16}}, {{1., 6.123233995736766*^-16}, {
           2., 4.898587196589413*^-16}}, {{2., 4.898587196589413*^-16}, {3., 2.4492935982947064`*^-16}}, {{3., 2.4492935982947064`*^-16}, {4., 0.}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {
           DiskBox[{0., 7.347880794884119*^-16}, 0.03700564971751412],
            InsetBox["1", Offset[{2, 2}, {0.03700564971751412, 0.037005649717514855}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{1., 6.123233995736766*^-16}, 0.03700564971751412],
            InsetBox["2", Offset[{2, 2}, {1.0370056497175142, 0.03700564971751473}],
             ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{2., 4.898587196589413*^-16}, 0.03700564971751412],
            InsetBox["3", Offset[{2, 2}, {2.037005649717514, 0.03700564971751461}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{3., 2.4492935982947064*^-16}, 0.03700564971751412], InsetBox["4", Offset[{2, 2}, {3.037005649717514, 0.03700564971751436}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{4., 0.}, 0.03700564971751412], InsetBox["5", Offset[{2, 2}, {4.037005649717514, 0.03700564971751412}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[2]=

Articulation vertices a random graph:

In[3]:=
g = RandomGraph[{10, 15}, VertexLabels -> "Name"]
Out[3]=
In[4]:=
ResourceFunction["ArticulationVertices"][g]
Out[4]=
In[5]:=
HighlightGraph[g, %, VertexSize -> Medium]
Out[5]=

Scope (4) 

ArticulationVertices works on undirected graphs:

In[6]:=

ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5}, {Null, 
SparseArray[
         Automatic, {5, 5}, 0, {1, {{0, 3, 5, 6, 8, 12}, {{2}, {4}, {5}, {1}, {5}, {
            5}, {1}, {5}, {1}, {2}, {3}, {4}}}, Pattern}]}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{0., 0.8325561906871413}, {0.3010800253510298, 0.}}, {{0., 0.8325561906871413}, {0.30246429986941076`, 1.6632246749266777`}}, {{0., 0.8325561906871413}, {
           0.9367116241395352, 0.8305143773305487}}, {{
           0.3010800253510298, 0.}, {0.9367116241395352, 0.8305143773305487}}, {{2.1062477545526, 0.8314415988443299}, {0.9367116241395352, 0.8305143773305487}}, {{0.30246429986941076`, 1.6632246749266777`}, {0.9367116241395352, 0.8305143773305487}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {
           DiskBox[{0., 0.8325561906871413}, 0.023467755848382843], InsetBox["1", Offset[{2, 2}, {0.023467755848382843, 0.8560239465355242}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3010800253510298, 0.}, 0.023467755848382843], InsetBox["2", Offset[{2, 2}, {0.32454778119941263, 0.023467755848382843}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{2.1062477545526, 0.8314415988443299}, 0.023467755848382843], InsetBox["3", Offset[{2, 2}, {2.129715510400983, 0.8549093546927127}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.30246429986941076, 1.6632246749266777}, 0.023467755848382843], InsetBox["4", Offset[{2, 2}, {0.3259320557177936, 1.6866924307750606}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.9367116241395352, 0.8305143773305487}, 0.023467755848382843], InsetBox["5", Offset[{2, 2}, {0.9601793799879181, 0.8539821331789315}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[6]=

Directed graphs:

In[7]:=
ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 4, 5, 3}, {{{1, 2}, {1, 3}, {4, 1}, {2, 4}, {4, 5}, {3, 4}}, Null}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], Arrowheads[Medium], ArrowBox[{{{0., 0.8325237365507117}, {0.3022856690330046, 1.6630384381024221`}}, {{0., 0.8325237365507117}, {
           0.3007464406897206, 0.}}, {{0.3022856690330046, 1.6630384381024221`}, {0.9367867581033937, 0.8304064271552061}}, {{0.3007464406897206, 0.}, {
           0.9367867581033937, 0.8304064271552061}}, {{
           0.9367867581033937, 0.8304064271552061}, {0., 0.8325237365507117}}, {{0.9367867581033937, 0.8304064271552061}, {2.1062994776078323`, 0.8312894528408282}}}, 0.023468169900657504`]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {
           DiskBox[{0., 0.8325237365507117}, 0.023468169900657504], InsetBox["1", Offset[{2, 2}, {0.023468169900657504, 0.8559919064513691}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3022856690330046, 1.6630384381024221}, 0.023468169900657504], InsetBox["2", Offset[{2, 2}, {0.32575383893366205, 1.6865066080030797}],
             ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3007464406897206, 0.}, 0.023468169900657504], InsetBox["4", Offset[{2, 2}, {0.32421461059037815, 0.023468169900657504}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.9367867581033937, 0.8304064271552061}, 0.023468169900657504], InsetBox["5", Offset[{2, 2}, {0.9602549280040512, 0.8538745970558635}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{2.1062994776078323, 0.8312894528408282}, 0.023468169900657504], InsetBox["3", Offset[{2, 2}, {2.1297676475084897, 0.8547576227414857}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[7]=

Multigraphs:

In[8]:=
ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 4, 5, 3}, {{{1, 2}, {1, 3}, {4, 1}, {2, 4}, {4, 5}, {3, 4}, {3, 4}},
          Null}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], Arrowheads[Medium], ArrowBox[{{0., 0.8325237365507117}, {0.3022856690330046, 1.6630384381024221`}}, 0.023468169900657504`], ArrowBox[{{0., 0.8325237365507117}, {0.3007464406897206, 0.}}, 0.023468169900657504`], ArrowBox[{{0.3022856690330046, 1.6630384381024221`}, {
           0.9367867581033937, 0.8304064271552061}}, 0.023468169900657504`], ArrowBox[BezierCurveBox[{{0.3007464406897206, 0.}, {
           0.48221394604948914`, 0.5197941586116861}, {
           0.9367867581033937, 0.8304064271552061}}], 0.023468169900657504`], ArrowBox[BezierCurveBox[{{0.3007464406897206, 0.}, {
           0.7553192527436203, 0.31061226854351076`}, {
           0.9367867581033937, 0.8304064271552061}}], 0.023468169900657504`], ArrowBox[{{0.9367867581033937, 0.8304064271552061}, {0., 0.8325237365507117}}, 0.023468169900657504`], ArrowBox[{{0.9367867581033937, 0.8304064271552061}, {
           2.1062994776078323`, 0.8312894528408282}}, 0.023468169900657504`]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {
           DiskBox[{0., 0.8325237365507117}, 0.023468169900657504], InsetBox["1", Offset[{2, 2}, {0.023468169900657504, 0.8559919064513691}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3022856690330046, 1.6630384381024221}, 0.023468169900657504], InsetBox["2", Offset[{2, 2}, {0.32575383893366205, 1.6865066080030797}],
             ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3007464406897206, 0.}, 0.023468169900657504], InsetBox["4", Offset[{2, 2}, {0.32421461059037815, 0.023468169900657504}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.9367867581033937, 0.8304064271552061}, 0.023468169900657504], InsetBox["5", Offset[{2, 2}, {0.9602549280040512, 0.8538745970558635}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{2.1062994776078323, 0.8312894528408282}, 0.023468169900657504], InsetBox["3", Offset[{2, 2}, {2.1297676475084897, 0.8547576227414857}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[8]=

Mixed graphs:

In[9]:=
ResourceFunction["ArticulationVertices"][\!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 4, 5, 3}, {{{3, 4}, {3, 4}}, {{1, 2}, {1, 3}, {1, 4}, {4, 2}, {4, 5}}}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], Arrowheads[Medium], 
{Arrowheads[0.], ArrowBox[{{0., 0.8300953176911254}, {0.2998484177688186, 1.6617076325093658`}}, 0.023477518033011596`]}, 
{Arrowheads[0.], ArrowBox[{{0., 0.8300953176911254}, {0.3032566061110073, 0.}}, 0.023477518033011596`]}, 
{Arrowheads[0.], ArrowBox[{{0., 0.8300953176911254}, {0.9376223572690652, 0.8317071619892272}}, 0.023477518033011596`]}, 
{Arrowheads[0.], ArrowBox[{{0.2998484177688186, 1.6617076325093658`}, {
            0.9376223572690652, 0.8317071619892272}}, 0.023477518033011596`]}, ArrowBox[BezierCurveBox[{{0.3032566061110073, 0.}, {
           0.4836729345349793, 0.5201691591024252}, {
           0.9376223572690652, 0.8317071619892272}}], 0.023477518033011596`], ArrowBox[BezierCurveBox[{{0.3032566061110073, 0.}, {
           0.7572060288450903, 0.3115380028868014}, {
           0.9376223572690652, 0.8317071619892272}}], 0.023477518033011596`], 
{Arrowheads[0.], ArrowBox[{{0.9376223572690652, 0.8317071619892272}, {
            2.107467328390144, 0.8323785304074218}}, 0.023477518033011596`]}}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
          0.7]}], {
           DiskBox[{0., 0.8300953176911254}, 0.023477518033011596], InsetBox["1", Offset[{2, 2}, {0.023477518033011596, 0.853572835724137}],
             ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.2998484177688186, 1.6617076325093658}, 0.023477518033011596], InsetBox["2", Offset[{2, 2}, {0.3233259358018302, 1.6851851505423774}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{0.3032566061110073, 0.}, 0.023477518033011596], InsetBox["4", Offset[{2, 2}, {0.3267341241440189, 0.023477518033011596}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, { DiskBox[{0.9376223572690652, 0.8317071619892272}, 0.023477518033011596], InsetBox["5", Offset[{2, 2}, {0.9610998753020767, 0.8551846800222388}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
           DiskBox[{2.107467328390144, 0.8323785304074218}, 0.023477518033011596], InsetBox["3", Offset[{2, 2}, {2.130944846423156, 0.8558560484404334}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\)]
Out[9]=

Properties and Relations (7) 

Define a graph with multiple articulation vertices:

In[10]:=
g = \!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5, 6}, {Null, 
SparseArray[
          Automatic, {6, 6}, 0, {1, {{0, 3, 5, 6, 7, 9, 12}, {{4}, {5}, {6}, {5}, {6}, {
             6}, {1}, {1}, {2}, {1}, {2}, {3}}}, Pattern}]}, {GraphLayout -> {"Dimension" -> 2}, VertexCoordinates -> {{1, 2}, {2, 3}, {2, 1}, {1, 1}, {1, 3}, {2, 2}}, VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{1., 2.}, {1., 1.}}, {{1., 2.}, {1., 3.}}, {{1., 2.}, {2., 2.}}, {{2., 3.}, {1., 3.}}, {{2., 3.}, {2., 2.}}, {{2., 1.}, {2., 2.}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
           0.7]}], {DiskBox[{1., 2.}, 0.02261146496815286], InsetBox["1", Offset[{2, 2}, {1.0226114649681528, 2.022611464968153}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{2., 3.}, 0.02261146496815286], InsetBox["2", Offset[{2, 2}, {2.022611464968153, 3.022611464968153}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{2., 1.}, 0.02261146496815286], InsetBox["3", Offset[{2, 2}, {2.022611464968153, 1.0226114649681528}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{1., 1.}, 0.02261146496815286], InsetBox["4", Offset[{2, 2}, {1.0226114649681528, 1.0226114649681528}],
              ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{1., 3.}, 0.02261146496815286], InsetBox["5", Offset[{2, 2}, {1.0226114649681528, 3.022611464968153}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {DiskBox[{2., 2.}, 0.02261146496815286], InsetBox["6", Offset[{2, 2}, {2.022611464968153, 2.022611464968153}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\);
In[11]:=
ResourceFunction["ArticulationVertices"][g]
Out[11]=

Deleting any of the articulation vertices, disconnects the graph:

In[12]:=
VertexDelete[g, #] & /@ %
Out[12]=
In[13]:=
ConnectedGraphQ /@ %
Out[13]=

FindVertexCut finds a single vertex cut possibly containing multiple vertices:

In[14]:=
RandomGraph[{5, 6}, VertexLabels -> "Name"]
In[15]:=
g = \!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5}, {Null, 
SparseArray[
          Automatic, {5, 5}, 0, {1, {{0, 2, 5, 8, 10, 12}, {{2}, {4}, {1}, {3}, {5}, {
             2}, {4}, {5}, {1}, {3}, {2}, {3}}}, Pattern}]}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{1.946357075691071, 0.}, {0.8644094259323477, 0.03559161309665715}}, {{1.946357075691071, 0.}, {
            1.944089418667558, 0.9736290714156641}}, {{
            0.8644094259323477, 0.03559161309665715}, {
            0.8644653297498841, 0.9369712252800357}}, {{
            0.8644094259323477, 0.03559161309665715}, {0., 0.48610081639693364`}}, {{0.8644653297498841, 0.9369712252800357}, {1.944089418667558, 0.9736290714156641}}, {{0.8644653297498841, 0.9369712252800357}, {0., 0.48610081639693364`}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
           0.7]}], {
            DiskBox[{1.946357075691071, 0.}, 0.022174718349787903], InsetBox["1", Offset[{2, 2}, {1.9685317940408589, 0.022174718349787903}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0.8644094259323477, 0.03559161309665715}, 0.022174718349787903], InsetBox["2", Offset[{2, 2}, {0.8865841442821356, 0.05776633144644505}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0.8644653297498841, 0.9369712252800357}, 0.022174718349787903], InsetBox["3", Offset[{2, 2}, {0.886640048099672, 0.9591459436298236}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{1.944089418667558, 0.9736290714156641}, 0.022174718349787903], InsetBox["4", Offset[{2, 2}, {1.9662641370173457, 0.995803789765452}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0., 0.48610081639693364}, 0.022174718349787903], InsetBox["5", Offset[{2, 2}, {0.022174718349787903, 0.5082755347467216}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\);
In[16]:=
FindVertexCut[g]
Out[16]=

For this graph there are no articulation vertices:

In[17]:=
ResourceFunction["ArticulationVertices"][g]
Out[17]=

For graphs with vertex connectivity 1, the cut vertex returned by FindVertexCut is one of the articulation vertices:

In[18]:=
g = \!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5, 6}, {Null, 
SparseArray[
          Automatic, {6, 6}, 0, {1, {{0, 1, 4, 7, 8, 11, 14}, {{2}, {1}, {5}, {6}, {
             4}, {5}, {6}, {3}, {2}, {3}, {6}, {2}, {3}, {5}}}, Pattern}]}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{0., 0.32631396690081443`}, {1.0820754106444934`,
             0.32660497556532353`}}, {{1.0820754106444934`, 0.32660497556532353`}, {2.058548460124532, 0.6528056947974704}}, {{1.0820754106444934`, 0.32660497556532353`}, {2.058059280977677, 0.}}, {{
            3.033417111120894, 0.3261798437243373}, {
            4.114650558879083, 0.32643795956543176`}}, {{
            3.033417111120894, 0.3261798437243373}, {
            2.058548460124532, 0.6528056947974704}}, {{
            3.033417111120894, 0.3261798437243373}, {
            2.058059280977677, 0.}}, {{2.058548460124532, 0.6528056947974704}, {2.058059280977677, 0.}}}]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
           0.7]}], {
            DiskBox[{0., 0.32631396690081443}, 0.037732852609720646], InsetBox["1", Offset[{2, 2}, {0.037732852609720646, 0.3640468195105351}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{1.0820754106444934, 0.32660497556532353}, 0.037732852609720646], InsetBox["2", Offset[{2, 2}, {1.1198082632542141, 0.3643378281750442}],
              ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{3.033417111120894, 0.3261798437243373}, 0.037732852609720646], InsetBox["3", Offset[{2, 2}, {3.0711499637306146, 0.36391269633405793}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{4.114650558879083, 0.32643795956543176}, 0.037732852609720646], InsetBox["4", Offset[{2, 2}, {4.152383411488803, 0.3641708121751524}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{2.058548460124532, 0.6528056947974704}, 0.037732852609720646], InsetBox["5", Offset[{2, 2}, {2.0962813127342526, 0.690538547407191}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{2.058059280977677, 0.}, 0.037732852609720646], InsetBox["6", Offset[{2, 2}, {2.095792133587398, 0.037732852609720646}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\);
In[19]:=
FindVertexCut[g]
Out[19]=
In[20]:=
ResourceFunction["ArticulationVertices"][g]
Out[20]=

A graph with no articulation vertices is biconnected:

In[21]:=
g = \!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, {Null, 
SparseArray[
          Automatic, {10, 10}, 0, {1, {{0, 3, 6, 9, 13, 16, 20, 23, 25, 27, 30}, {{3}, {
             4}, {6}, {3}, {9}, {10}, {1}, {2}, {8}, {1}, {6}, {7}, {
             10}, {6}, {7}, {10}, {1}, {4}, {5}, {8}, {4}, {5}, {9}, {
             3}, {6}, {2}, {7}, {2}, {4}, {5}}}, Pattern}]}, {VertexLabels -> {"Name"}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[CompressedData["
1:eJxTTMoPSmVmYGDgB2ImKPYX+yByRJ/JYd9zZb1Y43f2uRukDrHwMjlohFty
r/2wwx5d/tarlGeLhb/bC7ywM5cO+YYhn5N4Z0bbFUYHX0FrtW8hv+y9Vq1f
GOzwwZ4BCtDNR5eHgYDJOzsjG25gyL9VXnP1L9dbe2vvGY9Pi2G619a61t3K
k8Ph1JnV07IKX2G4F9196PJH5sUY+z67Yn+nJoH7x4lvGPLo9i/j9DvvFfjR
nu/u4pcTd/3DMB9dHt18dHl089HNQ/cfunno4QcAtKfTSA==
"]]}, 
{Hue[0.6, 0.2, 0.8], EdgeForm[{GrayLevel[0], Opacity[
           0.7]}], {
            DiskBox[{2.2733232150810987, 0.9437700177361348}, 0.03049538741878849], InsetBox["1", Offset[{2, 2}, {2.303818602499887, 0.9742654051549233}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{1.0157047572962647, 0.}, 0.03049538741878849], InsetBox["2", Offset[{2, 2}, {1.0462001447150533, 0.03049538741878849}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{2.256356731833924, 0.09742242359183406}, 0.03049538741878849], InsetBox["3", Offset[{2, 2}, {2.2868521192527123, 0.12791781101062255}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{1.4422949790738842, 1.3955337675129194}, 0.03049538741878849], InsetBox["4", Offset[{2, 2}, {1.4727903664926727, 1.426029154931708}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{1.0823467347951037, 1.9205493094030461}, 0.03049538741878849], InsetBox["5", Offset[{2, 2}, {1.1128421222138922, 1.9510446968218347}],
              ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{2.228772348618966, 1.6457425588024137}, 0.03049538741878849], InsetBox["6", Offset[{2, 2}, {2.259267736037754, 1.6762379462212023}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0.32655649200249237, 1.4240646786127433}, 0.03049538741878849], InsetBox["7", Offset[{2, 2}, {0.35705187942128086, 1.4545600660315319}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{3.035755690106639, 0.8263447706980511}, 0.03049538741878849], InsetBox["8", Offset[{2, 2}, {3.0662510775254272, 0.8568401581168397}],
              ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0., 0.3828338475198523}, 0.03049538741878849], InsetBox["9", Offset[{2, 2}, {0.03049538741878849, 0.41332923493864077}], ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}, {
            DiskBox[{0.907591740921928, 0.9402827687466478}, 0.03049538741878849], InsetBox["10", Offset[{2, 2}, {0.9380871283407164, 0.9707781561654363}],
              ImageScaled[{0, 0}],
BaseStyle->"Graphics"]}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FormatType->TraditionalForm,
FrameTicks->None]\);
In[22]:=
ResourceFunction["ArticulationVertices"][g]
Out[22]=
In[23]:=
KVertexConnectedGraphQ[g, 2]
Out[23]=

A graph with a vertex of degree 1 cannot be biconnected:

In[24]:=
g = RandomGraph[DegreeGraphDistribution[{4, 4, 3, 2, 1}], VertexLabels -> "Name"]
Out[24]=
In[25]:=
ResourceFunction["ArticulationVertices"][g]
Out[25]=

An articulation vertex is a member of at least two biconnected components:

In[26]:=
g = \!\(\*
GraphicsBox[
NamespaceBox["NetworkGraphics",
DynamicModuleBox[{Typeset`graph = HoldComplete[
Graph[{1, 2, 5, 3, 4, 6, 7}, {Null, {{1, 2}, {1, 3}, {2, 4}, {5, 3}, {4, 6}, {5, 6}, {
          6, 7}}}, {ImageSize -> {130, Automatic}, VertexCoordinates -> {{1.9595652573438145`, 0.5880825319731845}, {1.4502332118640586`, 1.1759717047601015`}, {1.4506626970033527`, 0.}, {
           0.6271580681226379, 0.9434230409725781}, {
           0.6269943909097138, 0.23230866903609504`}, {0., 0.5879767003984426}, {1.2, 0.5879767003984426}}, VertexShapeFunction -> {{
Disk[#, 0.1], Black, 
Text[#2, #]}& }, VertexStyle -> {
GrayLevel[1]}}]]}, 
TagBox[GraphicsGroupBox[{
{Hue[0.6, 0.7, 0.5], Opacity[0.7], LineBox[{{{1.9595652573438145`, 0.5880825319731845}, {
            1.4502332118640586`, 1.1759717047601015`}}, {{
            1.9595652573438145`, 0.5880825319731845}, {
            1.4506626970033527`, 0.}}, {{1.4502332118640586`, 1.1759717047601015`}, {0.6271580681226379, 0.9434230409725781}}, {{1.4506626970033527`, 0.}, {
            0.6269943909097138, 0.23230866903609504`}}, {{
            0.6271580681226379, 0.9434230409725781}, {0., 0.5879767003984426}}, {{0.6269943909097138, 0.23230866903609504`}, {0., 0.5879767003984426}}, {{0., 0.5879767003984426}, {1.2, 0.5879767003984426}}}]}, 
{GrayLevel[1], EdgeForm[{GrayLevel[0], Opacity[
           0.7]}], {
            DiskBox[{1.9595652573438145, 0.5880825319731845}, 0.1], 
{GrayLevel[0], InsetBox[
              "1", {1.9595652573438145, 0.5880825319731845}]}}, {
            DiskBox[{1.4502332118640586, 1.1759717047601015}, 0.1], 
{GrayLevel[0], InsetBox[
              "2", {1.4502332118640586, 1.1759717047601015}]}}, {
            DiskBox[{1.4506626970033527, 0.}, 0.1], 
{GrayLevel[0], InsetBox["5", {1.4506626970033527, 0.}]}}, {
            DiskBox[{0.6271580681226379, 0.9434230409725781}, 0.1], 
{GrayLevel[0], InsetBox[
              "3", {0.6271580681226379, 0.9434230409725781}]}}, {
            DiskBox[{0.6269943909097138, 0.23230866903609504}, 0.1], 
{GrayLevel[0], InsetBox[
              "4", {0.6269943909097138, 0.23230866903609504}]}}, {
            DiskBox[{0., 0.5879767003984426}, 0.1], 
{GrayLevel[0], InsetBox["6", {0., 0.5879767003984426}]}}, {
            DiskBox[{1.2, 0.5879767003984426}, 0.1], 
{GrayLevel[0], InsetBox["7", {1.2, 0.5879767003984426}]}}}}],
MouseAppearanceTag["NetworkGraphics"]],
AllowKernelInitialization->False]],
DefaultBaseStyle->{"NetworkGraphics", FrontEnd`GraphicsHighlightColor -> Hue[0.8, 1., 0.6]},
FrameTicks->None,
GridLinesStyle->Directive[
GrayLevel[0.5, 0.4]],
ImageSize->{130, Automatic}]\);
In[27]:=
KVertexConnectedComponents[g, 2]
Out[27]=
In[28]:=
ResourceFunction["ArticulationVertices"][g]
Out[28]=

GraphData[name,{"Graph","ArticulationVertices"}] gives the articulation vertices of a named graph:

In[29]:=
GraphData["WaltherGraph", {"Graph", "ArticulationVertices"}]
Out[29]=
In[30]:=
ResourceFunction["ArticulationVertices"][First[%]]
Out[30]=

Version History

  • 1.0.0 – 13 August 2020

Related Resources

License Information