SPOJ Brasil

Problem hidden
This problem was hidden by Editorial Board member probably because it has incorrect language version or invalid test data, or description of the problem is not clear.

SPOJ Problem Set (seletivas)

1759. O Cubo

Problema: CUBO

Num futuro não muito distante as pessoas buscarão jogos cada vez mais perigosos para se divertir. Depois de ultra-leve e bungee-jump as pessoas precisarão de jogos em que suas atividades mentais sejam também colocadas a prova. É o caso deste jogo, chamado "cube", inventado na Nova Zelândia. Em alguns lugares o jogo também é conhecido pelo seu nome em japonês: sokoban.

Considere um labirinto bi-dimensional composto por células quadradas, onde cada uma delas ou está livre ou está sendo ocupada por uma pedra. A cada passo, você pode sair de uma célula e mover-se para outra célula vizinha (i.e., cima, baixo, direita e esquerda) livre. Você está ocupando uma das células livres desse labirinto.

Uma célula do labirinto contém uma pilha de caixas. A pilha pode ser movida de uma célula i para uma célula k (por exemplo, k = i+1), vizinha de i, na direção ik se você estiver numa célula j (no caso, j = i-1), vizinha de i , e a direção ik é igual à direção ji. Uma caixa não pode ser movida de qualquer outra maneira (ou seja, você não pode puxá-la para trás). Logo, se ela for parar em algum canto do labirinto, você não será capaz de movê-la novamente. Por fim, note que em cada empurrão você dá um passo, e que o contrário não é necessariamente verdade.

Uma das células vazias é marcada como a célula final. Sua tarefa é trazer a caixa para essa célula final através de uma seqüência de passos e empurrões na caixa. Como a caixa é pesada, você quer realizar o menor número possível de empurrões na caixa.

Observe que no jogo de vida real há a possibilidade de você se prender ou mesmo ser esmagado pela caixa, tornando tudo muito mais divertido.

Entrada

O arquivo de entrada é composto por várias instâncias. Cada instância começa com uma linha contendo dois inteiro r e c (ambos menores ou iguais a 20) representando o número de linhas e colunas do labirinto.

Em seguida, são fornecidas r linhas, cada uma contendo c caracteres. Cada caractere descreve uma célula do labirinto. Uma célula ocupada por uma pedra é indicada por # e uma célula vazia é representada por um "." (sem as aspas). Sua posição inicial é indicada por S, a posição inicial da caixa é indicada por B e a posição final da caixa é indicada por T.

A entrada termina quando r = c = 0.

Saída

Para cada labirinto, inicialmente imprima o número da instância, conforme mostra o exemplo de saída abaixo. Se for impossível levar a caixa até sua posição final, imprima "Impossivel".

Caso contrário, você deve imprimir dois inteiros x e y, onde x indica o número de movimentos (passos + empurrões) e y o número de empurrões de uma seqüência que faz com que você leve a caixa até a posição final. O número de empurrões dever ser minimizado. Caso exista mais de uma seqüência possível que utiliza um número mínimo de empurrões, o número total de movimentos deve ser minimizado. Imprima uma linha em branco após cada instância.

Exemplo

Entrada:
1 7
SB....T
1 7
SB..#.T
7 11
###########
#T##......#
#.#.#..####
#....B....#
#.######..#
#.....S...#
###########
0 0 

Saída:
Instancia 1
5 5

Instancia 2
Impossivel

Instancia 3
28 6 

Adicionado por:Wanderley Guimarães
Data:2007-09-01
Tempo limite:1s
Tamanho do fonte:50000B
Linguagem permitida:Todas exceto: AWK CLOJ ERL F# GO JS PERL 6 SCALA SED TCL
Origem:Seletiva para Maratona de Programação do IME - 2006

SPOJ System © 2012 Sphere Research Labs | Projekty informatyczne i aplikacje na zamówienie. All Rights Reserved.