09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

20.4. Vuelta atrás 465<br />

type<br />

tDominio = 1..8;<br />

...<br />

procedure OchoDamas (i: numero de dama; S: solucParcial);<br />

var<br />

col: tDominio;<br />

begin<br />

for col:= 1 to 8 do<br />

if puede situarse la dama i-ésima <strong>en</strong> la columna col sin<br />

estar a tiro de las anteriores (1, . . . , i-1) th<strong>en</strong> begin<br />

Situar la dama i-ésima <strong>en</strong> la columna col<br />

(con lo que se ti<strong>en</strong>e la situación S’)<br />

if i = 8 th<strong>en</strong><br />

Registrar esta solución<br />

else<br />

Resolver OchoDamas (i+1, S’)<br />

<strong>en</strong>d {if}<br />

<strong>en</strong>d; {OchoDamas}<br />

2. Tantear cuántas soluciones exist<strong>en</strong>.<br />

El esquema es una variante del anterior, estableci<strong>en</strong>do un contador a cero<br />

antes de iniciar la búsqueda de soluciones y cambiando la acción de registrar<br />

una solución por increm<strong>en</strong>tar el contador.<br />

3. G<strong>en</strong>erar una solución, si existe, o indicar lo contrario.<br />

En este caso, la búsqueda termina cuando se halla una solución o se agotan<br />

las vías posibles.<br />

Un modo fácil de conseguirlo es modificar el primer esquema añadi<strong>en</strong>do un<br />

parámetro (booleano) para indicar cuándo se ha <strong>en</strong>contrado una solución<br />

y parando la búsqueda <strong>en</strong> caso de éxito. En el caso del problema de las<br />

ocho damas quedaría así:<br />

procedure OchoDamas(i: numero de dama; S: solucParcial;<br />

var halladaSol: boolean);<br />

var<br />

col: tDominio;<br />

begin<br />

halladaSol:= False;<br />

col:= 0;<br />

repeat<br />

col:= col + 1;<br />

if puede situarse la dama i-ésima <strong>en</strong> la columna col sin<br />

estar a tiro de las anteriores (1, . . . , i-1) th<strong>en</strong> begin

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!