Home | History | Annotate | Download | only in src

Lines Matching refs:finder

129 void cvStartFindCliques( CvGraph* graph, CvCliqueFinder* finder, int reverse, int weighted, int weighted_edges )
135 finder->weighted = 1;
136 finder->best_weight = 0;
137 finder->vertex_weights = (float*)malloc( sizeof(float)*(graph->total+1));
138 finder->cur_weight = (float*)malloc( sizeof(float)*(graph->total+1));
139 finder->cand_weight = (float*)malloc( sizeof(float)*(graph->total+1));
141 finder->cur_weight[0] = 0;
142 finder->cand_weight[0] = 0;
148 finder->vertex_weights[i] = ver->weight;
149 finder->cand_weight[0] += ver->weight;
152 else finder->weighted = 0;
156 finder->weighted_edges = 1;
157 //finder->best_weight = 0;
158 finder->edge_weights = (float*)malloc( sizeof(float)*(graph->total)*(graph->total));
159 //finder->cur_weight = (float*)malloc( sizeof(float)*(graph->total+1));
160 //finder->cand_weight = (float*)malloc( sizeof(float)*(graph->total+1));
162 //finder->cur_weight[0] = 0;
163 //finder->cand_weight[0] = 0;
164 memset( finder->edge_weights, 0, sizeof(float)*(graph->total)*(graph->total) );
177 finder->edge_weights[ i * graph->total + j ] =
178 finder->edge_weights[ j * graph->total + i ] = ((CvGraphWeightedEdge*)edge)->weight;
183 else finder->weighted_edges = 0;
187 finder->k = 0; //counter of steps
188 int N = finder->N = graph->total;
189 finder->current_comp = new int[N];
190 finder->All = new int*[N];
191 for( i = 0 ; i < finder->N; i++ )
193 finder->All[i] = new int[N];
196 finder->ne = new int[N+1];
197 finder->ce = new int[N+1];
198 finder->fixp = new int[N+1]; //node with minimal disconnections
199 finder->nod = new int[N+1];
200 finder->s = new int[N+1]; //for selected candidate
203 finder->adj_matr = new int*[N]; //assume filled with 0
206 finder->adj_matr[i] = new int[N];
211 _FillAdjMatrix( graph, finder->adj_matr, reverse );
214 int k = finder->k = 0; //stack size
215 memset( finder->All[k], 0, sizeof(int) * N );
216 for( i = 0; i < N; i++ ) finder->All[k][i] = i;
217 finder->ne[0] = 0;
218 finder->ce[0] = N;
220 finder->status = GO;
221 finder->best_score = 0;
225 void cvEndFindCliques( CvCliqueFinder* finder )
230 delete finder->current_comp;
231 for( i = 0 ; i < finder->N; i++ )
233 delete finder->All[i];
235 delete finder->All;
237 delete finder->ne;
238 delete finder->ce;
239 delete finder->fixp; //node with minimal disconnections
240 delete finder->nod;
241 delete finder->s; //for selected candidate
244 for( i = 0 ; i < finder->N; i++ )
246 delete finder->adj_matr[i];
248 delete finder->adj_matr;
250 if(finder->weighted)
252 free(finder->vertex_weights);
253 free(finder->cur_weight);
254 free(finder->cand_weight);
256 if(finder->weighted_edges)
258 free(finder->edge_weights);
262 int cvFindNextMaximalClique( CvCliqueFinder* finder )
264 int** connected = finder->adj_matr;
265 // int N = finder->N; //graph size
268 int k = finder->k; //stack size
269 int* Compsub = finder->current_comp;
270 int** All = finder->All;
272 int* ne = finder->ne;
273 int* ce = finder->ce;
274 int* fixp = finder->fixp; //node with minimal disconnections
275 int* nod = finder->nod;
276 int* s = finder->s; //for selected candidate
282 switch(finder->status)
288 if( (!finder->weighted) && (k + ce[k] - ne[k] < finder->best_score) )
290 finder->status = BACK;
294 if( finder->weighted && !finder->weighted_edges &&
295 finder->cur_weight[k] + finder->cand_weight[k] < finder->best_weight )
297 finder->status = BACK;
341 finder->status = NEXT;//go to backtrackcycle
379 if( finder->weighted )
380 candweight += finder->vertex_weights[old[i]];
392 assert( k <= finder->N );
393 if( finder->weighted )
396 finder->cur_weight[k] = finder->cur_weight[k-1] + finder->vertex_weights[sel];
397 finder->cand_weight[k] = candweight;
399 if( finder->weighted_edges )
405 added += finder->edge_weights[ Compsub[ind] * finder->N + sel ];
407 finder->cur_weight[k] += added;
413 finder->best_score = MAX(finder->best_score, k );
415 if( finder->weighted )
416 finder->best_weight = MAX( finder->best_weight, finder->cur_weight[k] );
429 finder->status = BACK;
430 finder->k = k;
441 finder->status = GO;
447 finder->status = BACK;
471 finder->status = NEXT;
474 finder->status = BACK;
483 finder->status = END;