Licenciatura em Engenharia Informática e Computação
Introdução à Programação I
Ano lectivo de 2001/2002

Folha 6
Colorir Mapas

Pretende-se colorir mapas de países, com um número mínimo de cores e sem que cores iguais sejam utilizadas em países vizinhos. São considerados países vizinhos os que tiverem, pelo menos, uma linha de fronteira comum (caso dos países 1 e 2) ou até um ponto de fronteira comum (caso dos países 2 e 3). O mapa é modelado através de uma lista, tendo um elemento por cada país do mapa. O elemento correspondente a um país representa os países vizinhos desse pais. Por exemplo, o país 1, sendo o primeiro elemento da lista, tem como vizinhos os países 2, 3 e 4.

   (define mapal
      '((2 3 4)           ; pais 1
        (1 3 4 5 7)       ; pais 2
        (1 6 7 2 4)       ; pais 3
        (l 7 6 2 3 5)     ; pais 4
        (7 2 4)           ; pais 5
        (3 4 7)           ; pais 6
        (2 3 4 5 6 8)     ; pais 7
        (7)))             ; pais 8
A modelação das cores pode também ser feita através de uma lista
   (define paleta-cores
      '(C1 C2 C3 C4))      ; neste caso, utilizam-se 4 cores 
A atribuição de cores aos vários paises é conseguida com uma chamada a colorir-mapa, procedimento que espera dois argumentos, ou seja, duas listas, uma que representa o mapa e outra o conjunto de cores utilizadas para colorir o mapa. Este procedimento devolve uma lista com a indicação das cores a atribuir a cada país, a começar pelo pais 1.
   => (colorir-mapa mapal paleta-cores)
  (c1 c2 c3 c4 c3 c2 c1 c2)
Uma tentativa de colorir o mapa com um conjunto de apenas três cores:
   => (colorir-mapa mapal '(cl c2 c3))
   nao ha' solucao... 
1. Fazer uma abordagem de-cima-para-baixo ao programa colorir-mapa.

2. Escrever em Scheme o procedimento colorir-mapa, com base nos resultados da abordagem anterior.

Sugestão de abordagem

A tarefa colorir-mapa pode desenvolver-se como se fosse a tarefa procura-solucao que, para além de tomar um mapa com os países para colorir e uma paleta de cores, tem ainda em consideração, como é natural, uma solução de cores que vai criando. Uma solução começa vazia e vai crescendo à medida que se encontra uma boa cor para cada um dos países.

Sendo assim, podemos imaginar as seguintes tarefas de procura-solucao:

Da descrição anterior ainda se identificam algumas sub-tarefas: