// auto-align-opt.c

// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.

#include <stdio.h>
#include "chl.h"
#include "automate-align.h"
#include "aa.h"

#define E(i,j)   e[((i) + 1)*(n + 1) + (j) +1]
#define T(i,j)   t[((i) + 1)*(n + 1) + (j) +1]


Automate autoAlignOpt(Mot x, Longueur m, Mot y, Longueur n, int *t) {
   Automate M;
   Etat *e;

   e = (Etat *)calloc((m + 2)*(n + 2)*sizeof(Etat));
   if (e == NULL) error("autoAlignOpt");

   M = nouvelAutomate();
   E(-1, -1) = initial(M);
   E(m - 1, n - 1) = nouvelEtat();
   terminal(E(m - 1, n - 1)) = VRAI;
   aa(m - 1, n - 1, e, t, x, y, n);
   return(M);
}