From 51f7fd23ba4e56dc198273eb795c8d1730cf4dbe Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@gmail.com> Date: Mon, 19 Apr 2021 13:54:45 +0000 Subject: [PATCH] Work in progress --- src/cluster.c | 32 ++++++++++++++++++++++---------- 1 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index 5d05058..85907f9 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -39,20 +39,23 @@ for(i=0;i<cstlist->n;i++){ if(cstlist->cluster[i]==NULL){ + if(i>=n) break; + //printf("Have to do compacting n=%d\n ",n); do{ n--; } while(cstlist->cluster[n]==NULL && n>i); cstlist->cluster[i]=cstlist->cluster[n]; cstlist->cluster[n]=NULL; + //printf("After compacting n=%d\n",n); } } cstlist->cluster=(ts_cluster **)realloc(cstlist->cluster,n*sizeof(ts_cluster *)); - + cstlist->n=n; return TS_SUCCESS; } -ts_bool cluster_join(ts_cluster *cluster1, ts_cluster *cluster2){ +ts_bool cluster_join(ts_cluster_list *cstlist, ts_cluster *cluster1, ts_cluster *cluster2){ ts_cluster *master_cluster,*slave_cluster; ts_uint i; if(cluster1->idx<cluster2->idx){ @@ -65,8 +68,13 @@ for(i=0;i<slave_cluster->nvtx;i++){ cluster_add_vertex(master_cluster,slave_cluster->vtx[i]); } - cluster_free(slave_cluster); - slave_cluster=NULL; + //find cluster in the list and free the location of the cluster + for(i=0;i<cstlist->n;i++){ + if(cstlist->cluster[i]==slave_cluster){ + cluster_free(slave_cluster); + cstlist->cluster[i]=NULL; + } + } return TS_SUCCESS; } @@ -94,8 +102,12 @@ /* This is a stub function. User should check whether the vertex is clustering or not. */ ts_bool is_clusterable(ts_vertex *vtx){ - -return 1; + if(fabs(vtx->c)>1e-15){ + return 1; + } + else { + return 0; + } } @@ -108,13 +120,13 @@ return NULL; } -ts_bool cluster_vertex_neighbor_check(ts_vertex *vtx){ +ts_bool cluster_vertex_neighbor_check(ts_cluster_list *cstlist, ts_vertex *vtx){ int j; for(j=0;j<vtx->neigh_no;j++){ if(vtx->neigh[j]->cluster!=NULL){ if(vtx->neigh[j]->cluster!=vtx->cluster){ - cluster_join(vtx->cluster, vtx->neigh[j]->cluster); + cluster_join(cstlist, vtx->cluster, vtx->neigh[j]->cluster); } } } @@ -131,7 +143,7 @@ //for each vertex vtx=vesicle->vlist->vtx[i]; if(is_clusterable(vtx)){ - if(vtx->cluster!=NULL){ + if(vtx->cluster==NULL){ //find first neigbor with cluster index cst=cluster_vertex_neighbor(vtx); if(cst==NULL){ @@ -141,7 +153,7 @@ } else { //we are added to the first cluster found cluster_add_vertex(cst,vtx); - cluster_vertex_neighbor_check(vtx); + cluster_vertex_neighbor_check(cstlist, vtx); cluster_list_compact(cstlist); } -- Gitblit v1.9.3