int alinhamento_rec(char **S, Vertex *Mtz, unsigned int *tams, unsigned int *indexp, unsigned int pos, VUTIL des) { int pant = volta(pos, des, indexp), /* Ponto anterior. */ vw, /* Valor de retorno das recursões. */ valor = INT_MIN, /* Maior valor das recursões. */ watu = W(pos, pant, S, indexp); /* W calculado com o ponto anterior. */ VUTIL destino = 0; /* Fim da recursão */ if (pos) { int max = P2k; /* Calculando todos os deslocamentos possíveis. */ for( int d=1; d<max; d++) { int np = Vizinho(pos, d, indexp, Mtz); if (np>=0) { vw = alinhamento_rec(S, Mtz, tams, indexp, np, d); if (valor < vw) { destino = d; valor = vw; } } } } else { valor = 0; } Mtz[pos].destino = destino; return watu + valor; }
std::vector<int> Grafo::Vizinhos(int id) { std::vector<int> lVizinhos; for(int i = 0; i < this->tamGrafo; i++) { if (Vizinho(id,i)) { lVizinhos.push_back(i); } } return lVizinhos; }
void print_rec( char **S, Vertex *Mtz, unsigned int *indexp, unsigned int *tams, unsigned int p, char **resp, int nums[]) { if (p) { print_rec(S, Mtz, indexp, tams, Vizinho(p, Mtz[p].destino, indexp, Mtz), resp, nums); for (int i=0; i<k; i++) { if ( Mtz[p].destino & (1<<i) ) { resp[i][3+2*nums[k]] = S[i][nums[i]]; nums[i]++; } else resp[i][3+2*nums[k]] = '-'; resp[i][4+2*nums[k]] = ' '; } nums[k]++; } }