Advertisement
Guest User

Mierda

a guest
Apr 25th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROCEDURE BuscarCamino (l: Lista; a: Binario): Indicaciones;
  2. (* Precondicion: 'a' esta ordenado, como arbol binario de busqueda, segun el
  3.    dato de texto.
  4.    Devuelve una secuencia de indicaciones a seguir para recorrer el camino
  5.    de 'a' (si existe) desde la raiz hasta una hoja, que tiene emparejamiento
  6.    de texto con 'l'.
  7.    Decimos que hay un emparejamiento de texto entre un camino en un arbol y una
  8.    lista si, al recorrer ambos y en cada paso, el dato de texto del elemento del
  9.    camino es igual al dato de texto del elemento de la lista.
  10.    Si no hay camino, el campo cantidad debe ser 0.
  11.    En otro caso, cantidad debe ser la cantidad de nodos del camino
  12.    (longitud de 'l') y desde indicaciones[1] hasta indicaciones[cantidad - 1]
  13.    deben estar las indicaciones que determinan el camino, empezando desde la
  14.    raiz. *)
  15.  
  16.    PROCEDURE IgualTexto(p: Posicion; l: Lista; a: Binario) : BOOLEAN;
  17.    BEGIN
  18.       IF Compare(TextoInfo(InfoLista(p, l)), TextoInfo(a^.info)) = equal THEN
  19.          RETURN TRUE;
  20.       ELSE  
  21.          RETURN FALSE;
  22.       END;
  23.    END IgualTexto;
  24.  
  25.    PROCEDURE CaminosNodo(p: Posicion; l : Lista; a: Binario; VAR iGlob: Indicaciones; i: Indicaciones; VAR encontroCamino: BOOLEAN);
  26.    VAR iAux: Indicaciones;
  27.    BEGIN
  28.       IF NOT encontroCamino THEN
  29.          IF EsHoja(a) AND EsFinalLista(p, l) THEN
  30.             iGlob.indicaciones := i.indicaciones;
  31.             iGlob.cantidad := i.cantidad;
  32.             encontroCamino := TRUE;
  33.          ELSE
  34.             p := Siguiente(p, l);
  35.             IF EsPosicionValida(p) THEN
  36.                IF TieneHijoDerecho(a) AND IgualTexto(p, l, a^.derecho) THEN
  37.                   iAux := i;
  38.                   iAux.cantidad := iAux.cantidad + 1;
  39.                   iAux.indicaciones[iAux.cantidad] := DER;
  40.                   CaminosNodo(p, l, a^.derecho, iGlob, iAux, encontroCamino);
  41.                END;
  42.                IF TieneHijoIzquierdo(a) AND IgualTexto(p, l, a^.izquierdo) THEN
  43.                   i.cantidad := i.cantidad + 1;
  44.                   i.indicaciones[i.cantidad] := IZQ;
  45.                   CaminosNodo(p, l, a^.izquierdo, iGlob, i, encontroCamino);
  46.                END;
  47.             END;
  48.          END;
  49.       END;
  50.    END CaminosNodo;
  51.  
  52. VAR
  53.    i : Indicaciones;
  54.    p : Posicion;
  55.    encontroCamino: BOOLEAN;
  56. BEGIN
  57.  
  58.    p := InicioLista(l);
  59.    IF (IgualTexto(p, l, a)) THEN
  60.       i.cantidad := 1;
  61.       encontroCamino := FALSE;
  62.       CaminosNodo(p, l, a, i, i, encontroCamino);
  63.       IF NOT encontroCamino THEN
  64.          i.cantidad := 0;
  65.       END;
  66.    ELSE
  67.       i.cantidad := 0;
  68.    END;
  69.  
  70.    RETURN i;
  71.  
  72. END BuscarCamino;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement