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; }
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; }
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; }
void SetTransfer(Set_t* from, Set_t* to) /* destructive operation on from */ { SetCopy(from,to); SetReset(from); }
/*! * 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); }
/*! * 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; }