Ol� Paulo,
 
O melhor algoritmo que se pode obter para esse problema � O(NxP), j� que se gasta isso s� para ler a matriz e procurar a minhoca (cuja posi��o inicial n�o � dada diretamente). Dessa forma descreverei um algoritmo com tal complexidade.
 
Podemos visualizar o tabuleiro como um grafo onde h� um n� para cada casa com valor 1 ou 2. H� arestas entre dois n�s se e somente se um n� � adjacente ao outro, o que significa que podemos alcan�ar um a partir do outro por um �nico movimento da minhoca. Temos ent�o um problema de caminho m�nimo em grafo n�o direcionado com arestas de peso 1. Podemos ent�o usar uma busca em largura que, em um grafo, o tempo � O(n+m), onde n � o n�mero de n�s e m o n�mero de arestas. Como n � O(NxP) e m � <(8n)/2, portanto tb O(NxP), temos que a busca em largura funciona em O(NxP).
 
Como funciona?
Marcamos todos os n�s como n�o visitados, exceto onde est� a minhoca, cuja dist�ncia a ela mesma � zero:
.#.#.#.#.#.#
##
..##..###.
....0.#..#..
.##.......#.
.....###....
# : casa com brasa
. casa n�o visitada
N�mero : dist�ncia � minhoca
 
Colocamos a posi��o inicial em uma lista L .
Repetimos ent�o, at� visitarmos uma casa da borda, os seguintes passos:
in�cio
Se a lista L � vazia, termina o programa sem solu��o
 
Para cada elemento p da lista L:
    Para cada vizinho f de p n�o brasa e n�o visitado
        Marque f com 1 mais o valor de p
        Coloque f em uma nova lista NL
 
Substitua a lista L pela nova lista NL
fim
Se terminarmos alcan�ando uma casa da borda, o valor dessa casa ser� a solu��o.
 
Por exemplo:
 
Na primeira execu��o teremos:
.#.#.#.#.#.#
##
.1##..###.
...101#..#..
.##111....#.
.....###....
Na segunda execu��o teremos:
.#2#2#.#.#.#
##2
1##2.###.
..2101#..#..
.##1112...#.
..222###....
E o programa terminar� com a solu��o 2.
 
Um abra�o
 
Vinicius Fortuna
 
 
----- Original Message -----
From: "Paulo Santa Rita" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, July 04, 2002 5:10 PM
Subject: [obm-l] Um Algoritmo Legal

> Ola Pessoal,
>
> Segue abaixo a traducao de um problema de computacao que recebi de outra
> lista e que achei interessante e digno de figurar nesta nostra lista OBM-L.
>
> O Algoritmo e de IA.
>
> Uma minhoca esta em uma celula de um labirinto quadriculado NxP ( N linhas,
> P colunas ). Ela almeja sair do labirinto. Todavia, sabe-se que nalgumas
> celulas ha brasa, noutras, terra. A minhoca se movimenta como o rei em um
> tabuleiro de xadrex.
>
> Os dados de entrada sao : N ,P e LAB(N,P).
>
> LAB(N,P) uma matriz da forma :
>
> 0 (zero) -> casa com brasa
> 1 (um) -> casa com terra
> 2 (dois) -> a minhoca
>
> Exemplo :
>
> 101010101010
> 001100110001
> 111121011011
> 100111111101
> 111110001111
>
> O programa ( function ) deve devolver :
>
> 1) 0 ( zero ) se nao houver um caminho de saida
> 2) N ( numero inteiro positivo ) se houver. Neste caso N e o menor numero de
> passos que a minhoca deve dar para sair do labirinto sem se queimar.
>
> O programa pode estar em qualquer linguagem padrao ou em pseudo-codigo.
>
> OBS : O tempo de resposta ( inteligencia do algoritmo ) sera o principal
> fator na classifucacao final dos algoritmos.
>
> Um Abraco a Todos
> Paulo Santa Rita
> 5,1709,040702

Responder a