.. index:: single: unweighted_undirected_graph(Dictionary)
.. _unweighted_undirected_graph/1:

.. rst-class:: right

**object**

``unweighted_undirected_graph(Dictionary)``
===========================================

Unweighted undirected graph predicates using a dictionary representation. Undirected edges are stored as two directed edges. The parametric object parameter is the dictionary to use for the graph representation.

| **Availability:** 
|    ``logtalk_load(graphs(loader))``

| **Author:** Paulo Moura
| **Version:** 1:0:0
| **Date:** 2026-02-20

| **Compilation flags:**
|    ``static, context_switching_calls``


| **Imports:**
|    ``public`` :ref:`unweighted_graph_common(Dictionary) <unweighted_graph_common/1>`
|    ``public`` :ref:`undirected_graph_common <undirected_graph_common/0>`
| **Uses:**
|    :ref:`list <list/0>`
|    :ref:`set <set/0>`

| **Remarks:**
|    (none)

| **Inherited public predicates:**
|     :ref:`unweighted_graph_protocol/0::add_edge/4`  :ref:`graph_protocol/0::add_edges/3`  :ref:`graph_protocol/0::add_vertex/3`  :ref:`graph_protocol/0::add_vertices/3`  :ref:`graph_protocol/0::all_pairs_min_paths/2`  :ref:`graph_protocol/0::all_pairs_min_predecessors/2`  :ref:`undirected_graph_common/0::articulation_points/2`  :ref:`graph_protocol/0::breadth_first_order/3`  :ref:`undirected_graph_common/0::bridges/2`  :ref:`unweighted_graph_protocol/0::complement/2`  :ref:`undirected_graph_common/0::cycle/2`  :ref:`unweighted_graph_protocol/0::delete_edge/4`  :ref:`graph_protocol/0::delete_edges/3`  :ref:`graph_protocol/0::delete_vertex/3`  :ref:`graph_protocol/0::delete_vertices/3`  :ref:`graph_protocol/0::depth_first_order/3`  :ref:`unweighted_graph_protocol/0::edge/3`  :ref:`graph_protocol/0::edges/2`  :ref:`graph_protocol/0::empty/1`  :ref:`undirected_graph_common/0::graph_coloring/3`  :ref:`undirected_graph_common/0::has_cycle/1`  :ref:`graph_protocol/0::has_path/3`  :ref:`graph_protocol/0::is_bipartite/1`  :ref:`graph_protocol/0::is_complete/1`  :ref:`graph_protocol/0::is_sparse/1`  :ref:`undirected_graph_common/0::is_tree/1`  :ref:`graph_protocol/0::max_path/5`  :ref:`undirected_graph_common/0::maximal_cliques/2`  :ref:`undirected_graph_common/0::maximum_cliques/2`  :ref:`graph_protocol/0::min_distances/3`  :ref:`graph_protocol/0::min_path/5`  :ref:`graph_protocol/0::min_predecessors/3`  :ref:`graph_protocol/0::neighbors/3`  :ref:`graph_protocol/0::new/1`  :ref:`graph_protocol/0::new/2`  :ref:`graph_protocol/0::new/3`  :ref:`graph_protocol/0::number_of_edges/2`  :ref:`graph_protocol/0::number_of_vertices/2`  :ref:`graph_protocol/0::path/3`  :ref:`graph_protocol/0::reachable/3`  :ref:`graph_protocol/0::vertices/2`  

.. contents::
   :local:
   :backlinks: top

Public predicates
-----------------

.. index:: degree/3
.. _unweighted_undirected_graph/1::degree/3:

``degree/3``
^^^^^^^^^^^^

Unifies ``Degree`` with the number of edges incident to ``Vertex``. Fails if ``Vertex`` is not in the graph.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``degree(Vertex,Graph,Degree)``
| **Mode and number of proofs:**
|    ``degree(+vertex,+graph,-integer)`` - ``zero_or_one``


------------

.. index:: is_connected/1
.. _unweighted_undirected_graph/1::is_connected/1:

``is_connected/1``
^^^^^^^^^^^^^^^^^^

True iff the graph is connected (every vertex is reachable from every other vertex).

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``is_connected(Graph)``
| **Mode and number of proofs:**
|    ``is_connected(+graph)`` - ``zero_or_one``


------------

.. index:: connected_components/2
.. _unweighted_undirected_graph/1::connected_components/2:

``connected_components/2``
^^^^^^^^^^^^^^^^^^^^^^^^^^

Unifies ``Components`` with a list of connected components. Each component is a sorted list of vertices.

| **Compilation flags:**
|    ``static``

| **Template:**
|    ``connected_components(Graph,Components)``
| **Mode and number of proofs:**
|    ``connected_components(+graph,-list(list(vertex)))`` - ``one``


------------

Protected predicates
--------------------

(no local declarations; see entity ancestors if any)

Private predicates
------------------

(no local declarations; see entity ancestors if any)

Operators
---------

(none)

