Observando a grade 2x2, para chegarmos ao destino (2,2), temos em cada ponto a possibilidade de ir para a direita (D) ou para baixo (B), ou seja, há 2 possíveis caminhos, que são percorridos para a direita um X número de vezes e, para baixo, um Y número de vezes. Todas as rotas terão X+Y passos.
O problema pode ser resolvido de diversas maneiras, mas acredito que todas relacionadas com Binomial Coefficient. Dentro desse contexto, escolhemos a implementação através do Triângulo de Pascal, onde cada número é obtido da soma dos números anteriores que estão à esquerda e acima. Observa-se uma analogia ao problema, pois montando uma grade preenchida com os números do Triângulo de Pascal, a coordenada final sempre indicará o número de caminhos possíveis, como ilustra a figura abaixo.
Cada número alocado em uma coordenada da grade é igual a soma dos números das coordenadas imediatamente à esquerda e acima. Assim, o 6 é a soma 3+3. O 20, a soma 10+10. O 70, a soma 35+35. O 6 representa o número de caminhos possíveis em uma grade 2x2, pois está na coordenada (2,2). O 20 representa o número de caminhos possíveis em uma grade 3x3, pois está na coordenada (3,3). O 70 representa o número de caminhos possíveis em uma grade 4x4, pois está na coordenada (4,4).
Dessa forma, bastaria criar um programa que criasse a grade 20x20 correspondente, preenchendo o valor de cada coordenada. O valor da coordenada (20,20) será a resposta do problema.
$tam = 20 $tam_matriz = $tam + 1 ## Matriz deve ser somada de 1 para o triangulo de Pascal $path = New-Object 'object[,]' $tam_matriz,$tam_matriz For ([int]$x=0; $x -lt $tam_matriz; $x++) { For ([int]$y=0; $y -lt $tam_matriz; $y++) { If ($x -eq 0) { $path[0,$y] = 1 } If ($y -eq 0) { $path[$x,0] = 1 } If (($x -gt 0) -and ($y -gt 0)) { $path[$x,$y] = $path[($x-1),$y] + $path[$x,($y-1)] } } } Clear-Host Write-Host "O número de caminhos possíveis, obtido pelo triângulo de Pascal" Write-Host "para uma matriz 20x20, foi:" $path[($tam),($tam)
O número de caminhos possíveis, obtido pelo triângulo de Pascal para uma matriz 20x20, foi: 137846528820
Nenhum comentário:
Postar um comentário