Next: Gera Código Up: Enunciados Previous: Tardes Vazias
Considere uma matriz NxM (N e M diferentes de 0) preenchida
com as cores preto e branco. A cor preta representa a cor de fundo. Um conjunto de
entradas brancas, ligadas, constitui uma forma. O objectivo consiste em determinar
o número de formas na matriz. Duas entradas brancas na matriz pertencem a uma mesma
forma, se existir um caminho de uma à outra através de entradas brancas. Um caminho
consiste em entradas sucessivas com coordenadas (i,j) e (k,l), tais que |i-k|
=< 1 e |j-l| =< 1.
O seu programa não poderá usar nenhum dos seguintes símbolos:
arg =.. functor name
A matriz será especificada como uma lista de listas contendo preto ou branco --isto deverá ser óbvio a partir dos exemplos-- que constituirá o primeiro argumento do predicado formas/2 que terá de escrever. O segundo argumento deverá ser unificado com o número de formas no primeiro argumento. Eis alguns exemplos:
?- formas([ [preto, branco,preto], [branco,preto, preto], [branco,preto,branco] ], N). N = 2 ?- formas([ [branco,branco,branco], [branco,preto, preto], [branco,preto, preto], [branco,preto, preto] ], N). N = 1