Prazo de entrega recomendado:
Você resolverá o quebra-cabeça do arranha-céu, para o qual terá que implementar uma solução baseada na estratégia de backtracking e recursão.
O Arranha-Céu é um jogo inspirado em cidades com enormes arranha-céus.
Esse jogo tem regras simples, mas pode ser bastante desafiador. Um
jogador recebe uma grade de
A regra principal diz que dois arranha-céus com a mesma altura não
podem ser colocados em uma mesma linha ou em uma mesma coluna. Além
disso, ao redor de cada linha ou coluna, temos um número que
corresponde a uma pista. Por exemplo, na grade abaixo de tamanho
Cada pista ao redor de uma linha ou coluna representa o número de edifícios que poderíamos ver nessa linha ou coluna se estivéssemos naquela posição, olhando a partir do chão. Por exemplo, à esquerda da terceira linha, temos a pista 3. Isso significa que a partir dali deve ser possível ver 3 edifícios. Uma possível maneira para preencher essa linha é construir edifícios com 2, 1, 3 e 4 andares, respectivamente.
Neste exemplo, poderiam ver a partir da esquerda apenas os edifícios com 2, 3 e 4 andares, enquanto o edifício que tem um único andar seria ocultados pelo que tem dois andares. Da mesma forma, no lado direito dessa linha temos a pista 1, que diz que daquela posição poderíamos ver apenas um arranha-céu. Isso ocorre porque o edifício de 4 andares ocultará os demais de 3, 2 e 1 andares.
Essas pistas também se aplicam às colunas. Por exemplo, na primeira coluna temos a pista 1 em cima, indicando que podemos ver apenas um edifício no sentido da seta e 2 em baixo, indicando que podemos ver dois edifícios no sentido da seta.
O quebra-cabeça proposto acima seria resolvido da seguinte forma:
Implemente um programa arranhaceu.c
que resolve o quebra-cabeça do
dos arranha-céus.
Entrada
A primeira linha contém o inteiro
As linhas a seguir detalham o quebra-cabeça.
Exemplo de entrada
Abaixo está o exemplo de entrada para o quebra-cabeça mostrado no início.
4
0 1 2 2 3 0
1 0 0 0 0 4
3 0 0 0 0 2
3 0 0 0 0 1
2 0 0 0 0 2
0 2 1 3 2 0
Saída
A grade que resolve o quebra-cabeça deve ser impressa.
Exemplo de saída
4 3 2 1
1 2 4 3
2 1 3 4
3 4 1 2
Critérios
A solução deve implementar uma estratégia de backtracking e recursão.
Lembre-se que em um algoritmo de backtracking, queremos construir uma solução parcial considerando todos os valores para um próximo elemento da solução. Para evitar que enumeremos todas as possibilidades, queremos descartar soluções parciais inválidas.
Em um problema com várias restrições, como esse jogo, pode haver mais de uma regra para excluir soluções parciais. Não tente implementar todas essas regras de uma só vez. Primeiro implemente um algoritmo de força bruta, sem backtracking. Teste. Em seguida, considere as regras mais simples para excluir soluções parciais. Só depois, considere as regras mais complicadas.
Correção
Esta tarefa será corrigida automaticamente sempre que você realizar um
git push
. Depois de terminada a tarefa, deve-se utilizar o botão na
interface de notas para solicitar a correção de um monitor.
Turma AB: O peso desta tarefa é 3.