Option Explicit
' Carraghan, R., Pardalos, P. M.: An exact algorithm for the
maximum clique problem. Op. Research Letters 9. (1990) 375-382
' converted to the weighted case
Private level_nodes() As Long, nStart() As Long, NodesNum()
As Long
Private t As Long, mnMaxClique As Long
Private nLevelWAcc() As Long
'
Public Function Start() As Long
Dim i As Long,
t_minus_1 As Long, wt As Long
ReDim level_nodes(1
To Nodes, 1 To Nodes)
ReDim NodesNum(1 To
Nodes)
ReDim nStart(1 To
Nodes)
ReDim nLevelWAcc(1
To Nodes)
mnMaxClique = 0
'''''' each level
has its own set of nodes
For i = 1 To Nodes
level_nodes(1, i)
= i
Next
NodesNum(1) = Nodes
'''''''''''''''''''''''''''''''''
t = 1
nStart(t) = 0
'''''''''''''''''''''''''''''''''''
While t >= 1
nStart(t) = nStart(t) + 1
If NodesNum(t) < nStart(t) Then
t = t - 1
Else
wt = 0
For i =
nStart(t) To NodesNum(t)
wt = wt +
w(level_nodes(t, i))
Next
''' Degree
control
If
(nLevelWAcc(t) + wt) > mnMaxClique Then
t_minus_1 = t
t = t + 1
nStart(t) = 0
NodesNum(t) =
0
nLevelWAcc(t)
= nLevelWAcc(t_minus_1) + w(level_nodes(t_minus_1, nStart(t_minus_1)))
''' define
nodes for the next level
For i =
nStart(t_minus_1) + 1 To NodesNum(t_minus_1)
If
arr(level_nodes(t_minus_1, nStart(t_minus_1)), level_nodes(t_minus_1, i)) Then
NodesNum(t) = NodesNum(t) + 1
level_nodes(t, NodesNum(t)) = level_nodes(t_minus_1, i)
End If
Next
If
NodesNum(t) = 0 Then
t = t - 1
If
nLevelWAcc(t + 1) > mnMaxClique Then
mnMaxClique
= nLevelWAcc(t + 1)
End If
End If
Else
t = t - 1
End If
End If
Wend
Start = mnMaxClique
End Function