Tarefa 3 - O problema das m rainhas

Prazo de entrega recomendado:

Coloque nove rainhas e um peão em um tabuleiro de xadrez usando backtracking.


O problema das oito rainhas é um famoso quebra-cabeça. Neste quebra-cabeça, devem ser colocadas oito rainhas em um tabuleiro de xadrez de forma que nenhuma delas seja atacada por outra. A rainha pode se mover na horizontal, vertical ou diagonal, qualquer número de casas, mas não pode pular nenhuma peça.

Um outro problema conhecido é o problema das nove rainhas. Nesta variante, queremos colocar nove rainhas em um tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. Só existem oito colunas no tabuleiro, então é claro que pelo menos duas rainhas teriam que ficar na mesma coluna, portanto o problema não tem solução. Mas suponha que possamos usar um ou mais peões para proteger as rainhas umas das outras. Qual é o número mínimo de peões que precisamos para colocar nove rainhas no tabuleiro?

Estamos interessados na versão mais geral desse jogo: o problema das $m$ rainhas. Neste quebra-cabeça queremos colocar $m$ rainhas em um tabuleiro de xadrez $n \times n$ ($n \le m \le 10$) de forma que nenhuma das rainhas seja atacada por outra e que o número de peões usados seja mínimo. A figura mostra uma solução com 1 peão para 9 rainhas em um tabuleiro 8 $\times$ 8.

Você deve resolver o problema usando backtracking. Antes de programar, pense no problema e escreva o algoritmo. Primeiro, crie um arquivo rainhas.md contendo: (i) a descrição da estrutura de dados que representa uma solução; (ii) uma descrição precisa e sucinta do subproblema recursivo considerado no backtracking. Depois de definir o problema e escrever um algoritmo, crie um programa em C de nome rainhas.c.

Entrada

O número $m$ de rainhas e o número $n$ de linhas do tabuleiro.

9 8

Saída

A primeira linha deve conter o número mínimo de peões necessários para dispor as $m$ rainhas no tabuleiro. As $n$ linhas seguintes representam a solução encontrada, de forma que um cada linha contém uma sequência de caracteres separados por espaço, em que r representa uma rainha, p um peão e . um espaço vazio. Se houver mais de uma solução possível, qualquer solução válida será aceita pelo teste automático. Se não houver solução, a saída deve conter somente uma mensagem -1.

1
. . r . . . . . 
r . p . . . . r 
. . . r . . . . 
. . . . . . r . 
. . r . . . . . 
. . . . . r . . 
. r . . . . . . 
. . . . r . . . 

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.