Пример #1
0
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;

}
Пример #3
0
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]++;
    }
}