Example #1
0
Stav* ProblemStavCreate(Problem* prb, int v, Set* m) {
  Stav* s = malloc(sizeof(Stav));
  if(m) s->m = SetCopy(m);
  else s->m = SetCreate(prb->g->n);
  s->v = v;
  return s;
}
Example #2
0
SArray* ProblemNaslednici(Problem* prb, Stav* s) {
  SArray* p = SArrayCreate(ProblemStavCompare);
  Set* mv = SetCopy(s->m);
  SetAdd(mv,s->v);
  Stav* n;
  int i; for(i=0; i<prb->g->n; i++) {
    if(prb->g->mat[s->v][i]>=0 && (!SetIsIn(mv,i) || (i==0 && mv->count==prb->g->n))) {
      n = ProblemStavCreate(prb,i,mv);
      SArrayAdd(p, (void*) n);
    }
  }
  SetDestroy(mv);
  return p;
}
Example #3
0
double ProblemHeuristika3(Problem* prb, Stav* s) {
  //soucet minimalnich ohodnoceni hran vedoucich do vrcholu do kterych obch. cest. jeste nevesel 
  double sum=0;
  double min;
  Set* m2 = SetInvertCopy(s->m); //kam muze jit
  Set* m1 = SetCopy(m2); //odkud muze jit
  SetRemove(m1, s->v); SetAdd(m1, 0);
  int* filter1 = SetArray(m1);
  int* filter2 = SetArray(m2);
  int i,j,x,y;
  for(i=0; i<m1->count; i++) {
    x=filter1[i];
    min = UINT_MAX;
    for(j=0; j<m2->count; j++) {
      y=filter2[j];
      if(prb->g->mat[y][x]>=0 && prb->g->mat[y][x]<min)
          min=prb->g->mat[y][x];
      }
    if(min!=UINT_MAX) sum+=min;
  }
  SetDestroy(m1); SetDestroy(m2); free(filter1); free(filter2);
  return sum;
}
Example #4
0
void
SetTransfer(Set_t* from, Set_t* to)	/* destructive operation on from */
{
	SetCopy(from,to);
	SetReset(from);
}
Example #5
0
 /*!
  * Re-assign to a copy of another register value.
  *
  *  @param[in] other    Register value that is copied.
  */
 void Assign(const REGVALUE &other)
 {
     ClearIfNeeded();
     SetCopy(other);
 }
Example #6
0
 /*!
  * Re-assign to a copy of another register value.
  *
  *  @param[in] other    Register value that is copied.
  *
  * @return  Reference to the new register value.
  */
 REGVALUE &operator =(const REGVALUE &other)
 {
     ClearIfNeeded();
     SetCopy(other);
     return *this;
 }