float color_similarity(CvScalar center_values[], string comparee) {
    const char* path ="/Users/Rango/Documents/coding/XCode/TextureSimilarity_data/";
    char buff[512];
    sprintf(buff, "%s%s.jpg", path, comparee.c_str());
    IplImage* src1 = cvLoadImage(buff, CV_LOAD_IMAGE_COLOR);
    
    int k = 0;
    float result = 100;
    
    uchar* data = (uchar*)src1->imageData;
    int step = src1->widthStep/sizeof(uchar);
    int channels = src1->nChannels;
    for (int i = 5; i < src1->height; i+=src1->height/10) {
        for (int j = 5; j < src1->width; j+=src1->width/10) {
            CvScalar s;
            s.val[0] = (double)data[i*step+j*channels+0];
            s.val[1] = (double)data[i*step+j*channels+1];
            s.val[2] = (double)data[i*step+j*channels+2];
            result = (k*result + min_distance(center_values, s))/(1+k);
            k++;
        }
    }
    
    return result;
}
Beispiel #2
0
double dist_ps(const struct graph *g, long x, long y)
{
  long lca, dax, day, dra;
  VEC(long) *lx, *ly;

  if (!init_metric)
    fatal("Error, uninitialized data for metric calcule");

  lx = get_list_ancestors(x);
  ly = get_list_ancestors(y);
  lca = LCA_CA(lx, ly, depth);
  dax = min_distance(g, lca, x);
  day = min_distance(g, lca, y);
  dra = max_distance(g, ROOT, lca);

  return dps(dax, day, dra);
}
Stack * dijkstra(List_adj * la,int source,int target,enum dijkstra_mode mode){
	Stack * stack = new_stack();
	int i,current;
	Cell * tmp_list;
	int link_value[3][3]= {{1,1},{1,100},{1,3}};
	int tmp;
	dijkstra_t * dij = new_dijkstra_s(la->size);
	if(mode>3 || mode<0)mode=0;
	if(source>la->size || source<0)return NULL;
	if(target>la->size || target<0)return NULL;
	if(la==NULL)return NULL;
	for (i=0;i<dij->size;i++){
		dij->visited[i] = white;
		dij->parent[i] = -2;
		dij->distance[i] = 1000000;
	}
	dij->distance[source] = 0;
	dij->parent[source] = -1;
	/*printf("dij->size %d\n",dij->size);*/
	
	current = min_distance(dij);
	while(current!=-1) {
		dij->visited[current] = black;
		tmp_list = la->list[current];
		while (tmp_list != NULL){
			/*printf("a visiter current=%d,target=%d\n",current,tmp_list->target);*/
			if ( dij->visited[tmp_list->target] == white){
				if (dij->distance[tmp_list->target] > dij->distance[current] + link_value[mode][tmp_list->linkvalue]){

					dij->distance[tmp_list->target]	= dij->distance[current] + link_value[mode][tmp_list->linkvalue];
					dij->parent[tmp_list->target] = current;
				}
			}
			tmp_list = tmp_list->next;
		}
		current = min_distance(dij);
	}
	tmp=target;
	while(dij->parent[tmp] != -1){
		push(stack,tmp);
		tmp=dij->parent[tmp];
	}
	push(stack,source);
	return stack;
}
Beispiel #4
0
int main() {
  int n, k;
  while (scanf("%d %d", &n, &k) != EOF) {
    int dist[n];
    dist[0] = 0;
    for (int i = 1; i < n; i++) scanf("%d", &dist[i]);
    printf("%d\n", min_distance(n, k, dist));
  }
}
Beispiel #5
0
double dist_tax_lca(const struct graph *g, long x, long y, long *lcap)
{
  long lca, dax, day, drx, dry;
  VEC(long) *lx, *ly;

  if (!init_metric)
    fatal("Error, uninitialized data for metric calcule");

  lx = get_list_ancestors(x);
  ly = get_list_ancestors(y);
  lca = LCA_CA(lx, ly, depth);
  *lcap = lca;
  dax = min_distance(g, lca, x);
  day = min_distance(g, lca, y);
  drx = min_distance(g, ROOT, x);
  dry = min_distance(g, ROOT, y);

  return dtax(dax, day, drx, dry);
}
  //subfunction: mark all neighbors of a particle and their neighbors (recursiv!)
void mark_neighbours(int type,int pa_nr,double dist,int *list){
  int k;
  for (k=0;k<n_part;k++){
     //only unmarked and particles with right distance
     if ( (partCfg[k].p.type == type) && (list[k] == 0) && (min_distance(partCfg[pa_nr].r.p,partCfg[k].r.p) < dist) ){
        //mark particle with same number as calling particle
        list[k]=list[pa_nr];
        mark_neighbours(type,k,dist,list);
     }
  }
}
void calc_rdf(int *p1_types, int n_p1, int *p2_types, int n_p2, 
	      double r_min, double r_max, int r_bins, double *rdf)
{
  long int cnt=0;
  int i,j,t1,t2,ind;
  int mixed_flag=0,start;
  double inv_bin_width=0.0,bin_width=0.0, dist;
  double volume, bin_volume, r_in, r_out;

  if(n_p1 == n_p2) {
    for(i=0;i<n_p1;i++) 
      if( p1_types[i] != p2_types[i] ) mixed_flag=1;
  }
  else mixed_flag=1;

  bin_width     = (r_max-r_min) / (double)r_bins;
  inv_bin_width = 1.0 / bin_width;
  for(i=0;i<r_bins;i++) rdf[i] = 0.0;
  /* particle loop: p1_types*/
  for(i=0; i<n_part; i++) {
    for(t1=0; t1<n_p1; t1++) {
      if(partCfg[i].p.type == p1_types[t1]) {
	/* distinguish mixed and identical rdf's */
	if(mixed_flag == 1) start = 0;
	else                start = (i+1);
	/* particle loop: p2_types*/
	for(j=start; j<n_part; j++) {
	  for(t2=0; t2<n_p2; t2++) {
	    if(partCfg[j].p.type == p2_types[t2]) {
	      dist = min_distance(partCfg[i].r.p, partCfg[j].r.p);
	      if(dist > r_min && dist < r_max) {
		ind = (int) ( (dist - r_min)*inv_bin_width );
		rdf[ind]++;
	      }
	      cnt++;
	    }
	  }
	}
      }
    }
  }

  /* normalization */
  volume = box_l[0]*box_l[1]*box_l[2];
  for(i=0; i<r_bins; i++) {
    r_in       = i*bin_width + r_min; 
    r_out      = r_in + bin_width;
    bin_volume = (4.0/3.0) * PI * ((r_out*r_out*r_out) - (r_in*r_in*r_in));
    rdf[i] *= volume / (bin_volume * cnt);
  }
}
Beispiel #8
0
void main(void)
{
     int  x[] = { 1, 3, 7, 11, 18};
     int  m   = sizeof(x)/sizeof(int);

     int  y[] = { 4, 5, 8, 13, 22};
     int  n   = sizeof(y)/sizeof(int);

     int  i, min_distance(int [], int [], int, int);

     printf("\nCompute Minimum Distance Between Two Sorted Arrays");
     printf("\n==================================================");
     printf("\n\nGiven Array #1 :");
     for (i = 0; i < m; i++)
          printf("%5d", x[i]);
     printf("\n\nGiven Array #2 :");
     for (i = 0; i < n; i++)
          printf("%5d", y[i]);
     printf("\n\nMinimum Distance = %d", min_distance(x, y, m, n));
}
void calc_rdf_intermol_av(int *p1_types, int n_p1, int *p2_types, int n_p2,
			  double r_min, double r_max, int r_bins, double *rdf, int n_conf)
{
  int i,j,k,l,t1,t2,ind,cnt=0,cnt_conf=1;
  int mixed_flag=0,start;
  double inv_bin_width=0.0,bin_width=0.0, dist;
  double volume, bin_volume, r_in, r_out;
  double *rdf_tmp, p1[3],p2[3];

  rdf_tmp = (double*)malloc(r_bins*sizeof(double));

  if(n_p1 == n_p2) {
    for(i=0;i<n_p1;i++)
      if( p1_types[i] != p2_types[i] ) mixed_flag=1;
  }
  else mixed_flag=1;
  bin_width     = (r_max-r_min) / (double)r_bins;
  inv_bin_width = 1.0 / bin_width;
  volume = box_l[0]*box_l[1]*box_l[2];
  for(l=0;l<r_bins;l++) rdf_tmp[l]=rdf[l] = 0.0;

  while(cnt_conf<=n_conf) {
    for(l=0;l<r_bins;l++) rdf_tmp[l]=0.0;
    cnt=0;
    k=n_configs-cnt_conf;
    for(i=0; i<n_part; i++) {
      for(t1=0; t1<n_p1; t1++) {
	if(partCfg[i].p.type == p1_types[t1]) {
	  // distinguish mixed and identical rdf's
	  if(mixed_flag == 1) start = 0;
	  else                start = (i+1);
	  //particle loop: p2_types
	  for(j=start; j<n_part; j++) {
	    for(t2=0; t2<n_p2; t2++) {
	      if(partCfg[j].p.type == p2_types[t2]) {
		/*see if particles i and j belong to different molecules*/
		if(partCfg[i].p.mol_id!=partCfg[j].p.mol_id) {
		  p1[0]=configs[k][3*i  ];p1[1]=configs[k][3*i+1];p1[2]=configs[k][3*i+2];
		  p2[0]=configs[k][3*j  ];p2[1]=configs[k][3*j+1];p2[2]=configs[k][3*j+2];
		  dist =min_distance(p1, p2);
		  if(dist > r_min && dist < r_max) {
		    ind = (int) ( (dist - r_min)*inv_bin_width );
		    rdf_tmp[ind]++;
		  }
		  cnt++;
		}
	      }
	    }
	  }
	}
      }
    }
    // normalization

    for(i=0; i<r_bins; i++) {
      r_in       = i*bin_width + r_min;
      r_out      = r_in + bin_width;
      bin_volume = (4.0/3.0) * PI * ((r_out*r_out*r_out) - (r_in*r_in*r_in));
      rdf[i] += rdf_tmp[i]*volume / (bin_volume * cnt);
    }

    cnt_conf++;
  } //cnt_conf loop
  for(i=0; i<r_bins; i++) {
    rdf[i] /= (cnt_conf-1);
  }
  free(rdf_tmp);

}
void analyze_rdfchain(double r_min, double r_max, int r_bins, double **_f1, double **_f2, double **_f3) {
  int i, j, ind, c_i, c_j, mon;
  double bin_width, inv_bin_width, factor, r_in, r_out, bin_volume, dist, chain_mass,
    *cm=NULL, *min_d=NULL, *f1=NULL, *f2=NULL, *f3=NULL;
  
  *_f1 = f1 = (double*)Utils::realloc(f1,r_bins*sizeof(double));
  *_f2 = f2 = (double*)Utils::realloc(f2,r_bins*sizeof(double));
  *_f3 = f3 = (double*)Utils::realloc(f3,r_bins*sizeof(double));
  cm = (double*)Utils::realloc(cm,(chain_n_chains*3)*sizeof(double));
  min_d = (double*)Utils::realloc(min_d,(chain_n_chains*chain_n_chains)*sizeof(double));
  for(i=0; i<r_bins; i++) {
    f1[i] = f2[i] = f3[i] = 0.0;
  }
  bin_width     = (r_max-r_min) / (double)r_bins;
  inv_bin_width = 1.0 / bin_width;
  for(c_i=0; c_i<chain_n_chains; c_i++) {
    cm[3*c_i] = cm[3*c_i+1] = cm[3*c_i+2] = 0.0;
    for(c_j=(c_i+1); c_j<chain_n_chains; c_j++) {
      min_d[c_i*chain_n_chains+c_j] = box_l[0] + box_l[1] + box_l[2];
    }
  }    
  for(c_i=0; c_i<chain_n_chains; c_i++) {
    for(i=0; i<chain_length; i++) {
      mon = chain_start + c_i*chain_length + i;
      cm[3*c_i]+= partCfg[mon].r.p[0]*PMASS(partCfg[mon]);
      cm[3*c_i+1]+= partCfg[mon].r.p[1]*PMASS(partCfg[mon]);
      cm[3*c_i+2]+= partCfg[mon].r.p[2]*PMASS(partCfg[mon]);	  
      for(c_j=(c_i+1); c_j<chain_n_chains; c_j++) {
        for(j=0; j<chain_length; j++) {
          dist = min_distance(partCfg[mon].r.p, partCfg[chain_start + c_j*chain_length+j].r.p);		
          if ((dist > r_min) && (dist < r_max)) {
            ind = (int) ( (dist - r_min)*inv_bin_width ); 
            f1[ind]+= 1.0; 
          }        
          if (dist<min_d[c_i*chain_n_chains+c_j]) min_d[c_i*chain_n_chains+c_j] = dist;
        }
      }
    }       
  }
  chain_mass = 0;
  for(i=0; i<chain_length; i++) chain_mass+= PMASS(partCfg[i]);
  for(c_i=0; c_i<chain_n_chains; c_i++) {  
    cm[3*c_i]/= chain_mass;
    cm[3*c_i+1]/= chain_mass;
    cm[3*c_i+2]/= chain_mass;
    for(c_j=(c_i+1); c_j<chain_n_chains; c_j++) {
      dist = min_d[c_i*chain_n_chains+c_j];
      if ((dist > r_min) && (dist < r_max)) {
        ind = (int) ( (dist - r_min)*inv_bin_width );
        f3[ind]+= 1.0; 
      }  
    }
  }    
  for(c_i=0; c_i<chain_n_chains; c_i++) {  
    for(c_j=(c_i+1); c_j<chain_n_chains; c_j++) {
      dist = min_distance(&cm[3*c_i],&cm[3*c_j]);
      if ((dist > r_min) && (dist < r_max)) {
        ind = (int) ( (dist - r_min)*inv_bin_width );
        f2[ind]+= 1.0; 
      }  
    }
  }
  /* normalization */
  factor = box_l[0]*box_l[1]*box_l[2] *1.5/PI/(chain_n_chains*(chain_n_chains-1));
  for(i=0; i<r_bins; i++) {
    r_in       = i*bin_width + r_min; 
    r_out      = r_in + bin_width;
    bin_volume = r_out*r_out*r_out - r_in*r_in*r_in;
    f1[i] *= factor / (bin_volume * chain_length*chain_length);
    f2[i] *= factor / bin_volume;
    f3[i] *= factor / bin_volume;
  }  
}
int main()
{

    char temp[WORD_SIZE+1];
    int T;
    char line[WORD_SIZE*2]={0};
    int i,j;
    int mat[N][N]={0};
    int n;
    char t;
    char start[WORD_SIZE+1]={0};
    char end[WORD_SIZE+1]={0};
    int start_pos=0,end_pos=0;
    t= scanf("%d\n",&T);
    while(T--)
    {
	i=0;
	while(1)
	{
	    gets(line);
	    sscanf(line,"%s",dict[i++].word);
	    if(dict[i-1].word[0]=='*')
	    {
		i--;
		break;
	    }
	}
	n = i;
	for(i=0;i<n;i++)
	    for(j=0;j<n;j++)
		mat[i][j]=0;
	for(i=0;i<n;i++)
	    for(j=0;j<n;j++)
		if((strlen(dict[i].word) == strlen(dict[j].word)))
		    if(diff_word(dict[i].word,dict[j].word)==1)
		    {
			mat[i][j] = 1;
			mat[j][i] = 1;
		    }
	t = min_distance(start_pos,end_pos,mat,n);
	while(1)
	{
	    if((gets(line))==NULL)
		break;;
	    if(line[0] == '\0')
		break;
	    sscanf(line,"%s %s",start,end);
	    for(i=0;i<n;i++)
		if(strcmp(dict[i].word,start)==0)
		{
		    start_pos = i;
		    break;
		}

	    for(i=0;i<n;i++)
		if(strcmp(dict[i].word,end)==0)
		{
		    end_pos = i;
		    break;
		}
	    if(strcmp(start,end)==0)
		printf("%s %s 0\n",start,end);
	    else
		if(strlen(start) != strlen(end))
		    printf("%s %s -1\n",start,end);
		else
		    printf("%s %s %d\n",start,end,distance[start_pos][end_pos]);
	    end[0] = '\0';
	}
	if(T!=0)
	    printf("\n");
    }
    return(0);
}