Uma matriz bidimensional do tamanho n × n é preenchida com n * n números, iniciando no número 1. Esses números devem ser classificados por linha em ordem crescente; o primeiro número de uma linha deve ser maior que o último número da linha anterior (o menor número de todos (1) estará em [0,0]). Isso é semelhante ao quebra-cabeça 15 .
Essa é, por exemplo, uma matriz classificada de tamanho n = 3 .
1 2 3
4 5 6
7 8 9
Entrada
A entrada é uma matriz codificada. Pode ser de qualquer tamanho, até n = 10. Exemplo para n = 3:
4 2 3
1 8 5
7 9 6
Resultado
Saída uma lista de trocas necessárias para classificar a matriz. Um swap é definido da seguinte forma: Dois números adjacentes trocam de posição, horizontal ou verticalmente; troca diagonal não é permitida.
Exemplo de saída para o exemplo acima:
- Troque 4 e 1
- Swap 8 e 5
- Swap 8 e 6
- Swap 9 e 8
Quanto menos trocas necessárias, melhor. O tempo de computação deve ser viável.
Aqui está outro exemplo de entrada, com n = 10:
41 88 35 34 76 44 66 36 58 28
6 71 24 89 1 49 9 14 74 2
80 31 95 62 81 63 5 40 29 39
17 86 47 59 67 18 42 61 53 100
73 30 43 12 99 51 54 68 98 85
13 46 57 96 70 20 82 97 22 8
10 69 50 65 83 32 93 45 78 92
56 16 27 55 84 15 38 19 75 72
33 11 94 48 4 79 87 90 25 37
77 26 3 52 60 64 91 21 23 7
Se não me engano, isso exigiria cerca de 1000-2000 swaps.