diff --git a/chain.c b/chain.c index de0e00d..ff00832 100644 --- a/chain.c +++ b/chain.c @@ -81,7 +81,7 @@ int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int memset(t, 0, n * 4); v = (int32_t*)kmalloc(km, n * 4); for (i = n_v = k = 0; i < n_u; ++i) { // starting from the highest score - int32_t n_v0 = n_v; + int32_t n_v0 = n_v, k0 = k; j = (int32_t)u[i]; do { v[n_v++] = j; @@ -92,7 +92,8 @@ int mm_chain_dp(int max_dist, int bw, int max_skip, int min_cnt, int min_sc, int if (n_v - n_v0 >= min_cnt) u[k++] = u[i]>>32<<32 | (n_v - n_v0); } else if ((int32_t)(u[i]>>32) - f[j] >= min_sc) { if (n_v - n_v0 >= min_cnt) u[k++] = ((u[i]>>32) - f[j]) << 32 | (n_v - n_v0); - } else n_v = n_v0; + } + if (k0 == k) n_v = n_v0; // no new chain added, reset } n_u = k, *_u = u; diff --git a/main.c b/main.c index cbb9b24..7be759e 100644 --- a/main.c +++ b/main.c @@ -10,7 +10,7 @@ #include "minimap.h" #include "mmpriv.h" -#define MM_VERSION "2.0-r94-pre" +#define MM_VERSION "2.0-r96-pre" void liftrlimit() {