\HeaderA{kCliques}{Find all the k-cliques in an undirected graph}{kCliques}
\keyword{models}{kCliques}
\begin{Description}\relax
Find all the k-cliques in an undirected graph
\end{Description}
\begin{Usage}
\begin{verbatim}
kCliques(g)
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{g}] an instance of the \code{graph} class 
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
Notice that there are different definitions of k-clique in different context.

In computer science, a k-clique of a graph is a clique, i.e., a complete subgraph, of k nodes. 

In Social Network Analysis, a k-clique in a graph is a subgraph where the distance between any two nodes is no greater than k.

Here we take the definition in Social Network Analysis.

Let D be a matrix, D[i][j] is the shortest path from node i to node j.  Algorithm is outlined as following: 
(1) use Johnson's algorithm to fill D; let N = max(D[i][j]) for all i, j; 
(2) each edge is a 1-clique by itself; 
(3) for k = 2, ..., N, try to expand each (k-1)-clique to k-clique: 
(3.1) consider a (k-1)-clique the current k-clique KC;
(3.2) repeat the following:
if for all nodes j in KC, D[v][j] <= k, add node v to KC;
(3.3) eliminate duplicates;
(4) the whole graph is N-clique.
\end{Details}
\begin{Value}
A list of length N; k-th entry (k = 1, ..., N) is a list of all the k-cliques in graph \code{g}.
\end{Value}
\begin{Author}\relax
Li Long <li.long@isb-sib.ch>
\end{Author}
\begin{References}\relax
Social Network Analysis: Methods and Applications.  By S. Wasserman and K. Faust, pp. 258.
\end{References}
\begin{SeeAlso}\relax
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
coex <- fromGXL(file(system.file("XML/snacliqueex.gxl",package="RBGL")))
kCliques(coex)
\end{ExampleCode}
\end{Examples}

