Caminho Mais Curto em uma Grelha

Dado um labirinto representado como uma grelha de r linhas por c colunas, é solicitado que se encontre o comprimento do caminho mais curto desde a célula inicial até a célula final.

O labirinto é representado da seguinte forma:

  • O piso é um ponto (.).

  • As paredes são cerquilhas (#).

  • O ponto de partida é a letra maiúscula S.

  • O ponto final é a letra maiúscula E.

É possível deslocar-se para células adjacentes (esquerda, direita, cima ou baixo) se elas não forem paredes.

O objetivo é determinar o comprimento do caminho mais curto entre a célula inicial e a célula final.

Entrada

A primeira linha da entrada contém dois inteiros r e c (1 ≤ r, c ≤ 1000).

As próximas r linhas contêm c colunas de caracteres que representam a grelha. Cada célula pode ser piso (.), parede (#), ponto de partida (S) ou ponto final (E). Garante-se que exista exatamente um S e um E em toda a grelha.

Saída

O programa deve imprimir o comprimento do caminho mais curto de S até E. Caso seja impossível chegar de S a E, deve-se imprimir Impossible.

Exemplos

Input

5 8
########
##.S....
....#.#.
#......#
...#...E
Output

7

Dica

Nem sempre é necessário construir um grafo explicitamente para executar um algoritmo de BFS. Às vezes, basta tratar a grelha como um grafo implícito e fazer a busca nela diretamente.

Sugestão

Você pode tratar a grelha como o seu grafo e manter um array bidimensional de distâncias d[][], que representa a menor distância entre a célula inicial e cada uma das restantes.

Constraints

Time limit: 15 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue