27 #ifndef GUM_CLIQUE_GRAPH_H 28 #define GUM_CLIQUE_GRAPH_H 32 #include <agrum/agrum.h> 34 #include <agrum/tools/graphs/undiGraph.h> 57 class CliqueGraph:
public UndiGraph {
70 explicit CliqueGraph(Size nodes_size = HashTableConst::default_size,
71 bool nodes_resize_policy =
true,
72 Size edges_size = HashTableConst::default_size,
73 bool edges_resize_policy =
true);
78 CliqueGraph(
const CliqueGraph& from);
82 virtual ~CliqueGraph();
100 virtual void addEdge(
const NodeId first,
const NodeId second);
107 virtual void eraseEdge(
const Edge& edge);
111 virtual void clearEdges();
115 NodeId addNode(
const NodeSet& clique);
119 virtual NodeId addNode();
124 virtual void addNode(
const NodeId id,
const NodeSet& clique);
129 virtual void addNode(
const NodeId id);
135 virtual void eraseNode(
const NodeId node);
140 virtual void clear();
146 const NodeSet& clique(
const NodeId idClique)
const;
157 NodeId container(
const NodeId idNode)
const;
164 virtual void setClique(
const NodeId idClique,
const NodeSet& new_clique);
173 virtual void addToClique(
const NodeId clique_id,
const NodeId node_id);
180 virtual void eraseFromClique(
const NodeId clique_id,
const NodeId node_id);
186 const NodeSet& separator(
const Edge& edge)
const;
192 const NodeSet& separator(
const NodeId clique1,
const NodeId clique)
const;
198 std::vector< NodeId > containerPath(
const NodeId node1,
const NodeId node2)
const;
203 bool hasRunningIntersection()
const;
207 bool isJoinTree()
const;
211 virtual std::string toString()
const;
215 virtual std::string toDot()
const;
226 CliqueGraph& operator=(
const CliqueGraph& from);
230 bool operator!=(
const CliqueGraph& from)
const;
234 bool operator==(
const CliqueGraph& from)
const;
240 NodeProperty< NodeSet > _cliques_;
243 EdgeProperty< NodeSet > _separators_;
247 void _updateSeparators_(
const NodeId clique1);
251 struct _RunningIntersect_ {
254 NodeSet visited_cliques;
261 NodeSet nodes_other_components;
264 NodeSet nodes_DFS_forbidden;
267 NodeSet nodes_DFS_seen;
287 NodeProperty< NodeSet > cliques_DFS_chain;
292 bool _runningIntersectionDFS_(
const NodeId clique,
294 _RunningIntersect_& infos_DFS)
const;
300 typedef CliqueGraph JunctionTree;
304 typedef CliqueGraph JoinTree;
308 std::ostream& operator<<(std::ostream&,
const CliqueGraph&);
312 #ifndef GUM_NO_INLINE 313 # include <agrum/tools/graphs/cliqueGraph_inl.h>