int main() {
    
    elemento **mat;
    int ntestes;
    char sequencia1[100];
    char sequencia2[100];
    char novaseq1[200]= "";
    char novaseq2[200]= "";
    //tamanho = quantidade de elementos iguais
    int tamanho;
    //n = tamanho sequencia 1
    int n;
    //m = tamanho sequencia 2
    int m;
    
    //ntestes é a quantidade de testes que terei no meu programa
    
    scanf("%d", &ntestes);
    
    // esse for pega as 2 proximas sequencias e resolve o problema pra elas, e assim para todo o par de sequencias
    for(int i=0;i<ntestes;i++) {
            scanf("%s", sequencia1);
            scanf("%s", sequencia2);
            n = strlen(sequencia1);
            m = strlen(sequencia2);
            //funcao que cria a matriz
            alinhamento(sequencia1,sequencia2,&mat);
            //funcao recursiva que pega o resultado e coloca
            tamanho = resposta(mat,sequencia1,sequencia2,novaseq1,novaseq2,m,n,0);
            printf("Tamanho: %d",tamanho);
            printf("\nAlinhamento:  \n");
            printf("%s \n",novaseq1);
            printf("%s \n",novaseq2);
            strset(novaseq1,0);
            strset(novaseq2,0);
            free(&mat);
            printf("\n");
    }
    return 0;
}
Example #2
0
int main(int argc, char *argv[]) {
	unsigned int *tams, *indexp;
	Vertex *Mtz;
	char **S, **resp, c='a';

    FILE *input = stdin;
	if (argc > 1) {
		input = fopen( argv[1], "r");
	}

	fscanf( input, "%d %d %d %u", &r, &q, &g, &k);

    if (k > sizeof(VUTIL)) {
        printf("O valor maximo de k e: %d", (int) sizeof(VUTIL));
        return 1;
    }

    P2k = (int) pow(2, k);

	S = (char **) malloc( k * sizeof (char *));
	resp = (char **) malloc( k * sizeof (char *));
	tams = (unsigned int*) malloc( k * sizeof (unsigned int));
	indexp = (unsigned int*) malloc( k * sizeof (unsigned int));

    for ( unsigned int i = 0; i < k; i++ ) {
        S[i] = (char *) malloc( NMAX * sizeof (char));
        resp[i] = (char *) malloc( NMAX * sizeof (char));
        resp[i][0] = c++;
        resp[i][1] = ':';
        resp[i][2] = ' ';
        fscanf(input, "%s", S[i]);
        tams[i] = strlen(S[i]) + 1;
        indexp[i] = 1;
	}

    fclose(input);

	for (unsigned int i = k - 1; i > 0; i--) {
		for (unsigned int j = 0; j < i; j++) {
			indexp[j] *= tams[i];
		}
	}
	Mtz = (Vertex *) malloc( tams[0] * indexp[0] * sizeof (Vertex));
	memset( Mtz, 0, tams[0] * indexp[0] * sizeof (Vertex));

    /* Preprocessando restrições. */
    zeros(indexp, tams, Mtz);

    /* Procurado melhor alinhamento. */
    printf("\npontos: %d\n", alinhamento(S, Mtz, tams, indexp));
    print(S, Mtz, indexp, tams, resp);

    for ( unsigned int i = 0; i < k; i++ ) {
        free(S[i]);
        free(resp[i]);
    }
    free(resp);
    free(S);
    free(tams);
    free(indexp);

    return 0;
}