Grid Colouring |
Um conjunto de contornos está representado em uma matriz bidimensional como ilustrado no input exemplo. Os contornos são feitos de qualquer caractere imprimível diferentes de espaço e `_' (underscore). No exemplo, esse caractere é `X'. Todos os outros elementos da matriz estão representados por espaços e/ou marking (caractere identificador da "cor", no exemplo você tem '#' e '/' como markers).
Uma zone da matriz é definida como sendo o
conjunto de pontos dentro de um
contorno de forma que 2 pontos da
zone pode ser conectado por um caminho
(vertical e/ou horizontal) que não cruze nenhum
contorno. Uma zone será preenchida se ela
contiver caracteres idênticos, chamados marking,
diferentes de space e do caractere de contorno. Nenhuma
zone pode ter caracteres de marking diferentes.
Entretanto, observe que enquanto TODOS os contornos são desenhados com o mesmo
caractere, os markings de zones
distintas podem ser diferentes. Uma zone não será
preenchida se apenas contiver espaços. Os markings só aparecerão
dentro de contornos.
Escreva um programa que preenche todas as zone que
contém marking com seu respectivo marking , em cada
matriz no arquivo de entrada . Como mostrado no exemplo abaixo.
No arquivo de entrada, cada matriz termina com uma linha de separação (uma linha contendo apenas`_' (underscore)). Serão no máximo 30 linhas com no máximo 80 caracteres. As linhas poderão ter tamanhos diferentes. A entrada termina quando houver 2 linhas de separação seguidas.
O output padrão haverá todas as matrizes preenchidas. Cada matriz deverá ser impressa com o mesmo formato das lidas no input, inclusive com suas linhas de separação. E essa última linha não deverá ser processada e nem imprimida na saída.
XXXXXXXXXXXXXXXXXXXX X X X X # # XXXXXXXX / X X X X XXXXXXXXXXXXXXXXXXXX _____________________________ XXXXXXXXXXXX XXXXXX X # XXX XXX X X X XX X X X X X X X XXXXXXX XXXXXXX X XX X X X XXXX XXXXXXXX XX XXXX X X / X X X X / X XXXXXXXXXXXXX XXXXXXXX _____________________________ _____________________________
XXXXXXXXXXXXXXXXXXXX X######X///////////X X######XXXXXXXX////X X#############X////X XXXXXXXXXXXXXXXXXXXX _____________________________ XXXXXXXXXXXX XXXXXX X###########XXX XXX X X X##XX#########X X X X X##X X##XXXXXXX XXXXXXX X###XX###X X#######X XXXX XXXXXXXX XX#####XXXX##X X//////X X###########X X//////X XXXXXXXXXXXXX XXXXXXXX _____________________________
Busque com laços simples os caracteres diferentes do contorno e de
espaços.
Crie uma função recursiva Colorir(int i, int j, char c) que recebe a
posição do caractere achado e o caractere.
E que se for conveniente colore os
seus vizinhos (possivelmente os caracteres acima, abaixo, num lado esquerdo e no
direito)
recursivamente. Lembrem dos casos base.
Protótipo: (só use se não tiver ABSOLUTAMENTE nenhuma idéia)
colorir (int i, int j, char c) { se i e j não estiverem na matriz não faça nada se m[i][j] for espaço em branco põe c em m[i][j] colorir(i, j - 1) // (esquerda) colorir(i, j + 1) // (direita) colorir(i - 1, j) // (alto) colorir(i + 1, j) // (baixo) }