1087 - Dama
Um problema que envolve um raciocínio bem legal.
Descrição
Solução
Primeiramente, vamos provar que é possível ir de uma casa até qualquer outra casa do tabuleiro com no máximo dois movimentos. Considere a origem com as coordenadas (x1, y1) e o destino com as coordenadas (x2, y2). Os dois movimentos no máximo que você pode fazer com a rainha consistem em primeiro ir para (x2, y1) e depois ir para (x2, y2).
A partir daí, podemos economizar uma viagem se pudermos ir direto para (x2, y2) usando os movimentos possíveis da rainha, o que pode acontecer em três casos diferentes:
Os pontos de origem e destino estão na mesma linha, ou seja, x1 = x2;
Os pontos de origem e destino estão na mesma coluna, ou seja, y1 = y2;
Os pontos de origem e destino estão na mesma diagonal, ou seja, |x1 - x2| = |y1 - y2| (a diferença entre as distâncias horizontal e vertical são iguais).
Lembrando que quando x1 = x2 e y1 = y2, não é necessário fazer movimento algum.
#include <stdlib.h>
#include <stdio.h>
int main(){
int X1, Y1, X2, Y2;
while(scanf("%d %d %d %d", &X1, &Y1, &X2, &Y2)){
if(!X1 && !Y1 && !X2 && !Y2) break;
if(X1 == X2 && Y1 == Y2){
printf("0\n");
}else if(X1 == X2 || Y1 == Y2 || abs(X1 - X2) == abs(Y1 - Y2)){
printf("1\n");
}else{
printf("2\n");
}
}
return 0;
}
Last updated
Was this helpful?