#include "mltaln.h" #define DEBUG 0 void topolcpy( int s1[], int s2[], int *mpt1, int *mpt2 ) { int i; *mpt1 = *mpt2; for( i=0; i<*mpt2; i++ ) { s1[i] = s2[i]; } } void topolcat( int s1[], int s2[], int *mpt1, int *mpt2 ) { int i; for( i=*mpt1; i<*mpt1+*mpt2; i++ ) { s1[i] = s2[i-*mpt1]; } *mpt1 += *mpt2; } void topolsort( int m, int s[] ) { int i, j, im; int sm; for( j=0; j2; n--, m=nseq-n ) { t = 0.0; for( i=0; i 0 ) { topol[m][0][count] = l; count++; } mem[m][0] = count; for( l=0, count=0; l 0 ) { topol[m][1][count] = l; count++; } mem[m][1] = count; for( l=0; l 0 ); if( n > 3 ) reduc( mtx, nseq, im, jm ); } for( i=0; i 0 ) { topol[m][0][count] = l; count++; } mem[m][0] = count; /* printf( " total length == %f\n", totallen ); */ topolcpy( topol[nseq-2][1], topol[nseq-3][0], mem[nseq-2]+1, mem[nseq-3] ); topolcat( topol[nseq-2][1], topol[nseq-3][1], mem[nseq-2]+1, mem[nseq-3]+1 ); topolsort( mem[nseq-2][1], topol[nseq-2][1] ); if( topol[nseq-2][0][0] > topol[nseq-2][1][0] ) topolswap( topol[nseq-2][0], topol[nseq-2][1], mem[nseq-2], mem[nseq-2]+1 ); }