I’m trying to solve the problem 3009 -- Curling 2.0, but I have as a result Wrong Answer.
I try all the test cases and others and all were ok.
If someone find the mistakes in the code or a case that returns a mistake it would be great.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Nodo{
public int x;
public int y;
public int disActual;
public Nodo(int x1,int y1,int d){
x=x1;
y=y1;
disActual=d;
}
}
public class P3009 {
private static int[][] mat= new int[20][20];
public static void main (String []args){
Scanner in = new Scanner(System.in);
int w=in.nextInt();
int h=in.nextInt();
while(w!=0){
int xO=0;
int yO=0;
int xD=0;
int yD=0;
for(int i = 0;i<w;i++){
for(int j=0;j<h;j++){
mat[i][j]=in.nextInt();
if(mat[i][j]==2){
xO=i;yO=j;
}else if(mat[i][j]==3){
xD=i;yD=j;
}
}
}
int min=bfs(mat,xO,yO,xD,yD,w,h);
System.out.println(min);
w=in.nextInt();
h=in.nextInt();
}
}
private static int bfs(int[][] mat2, int xO, int yO, int xD, int yD,int w,int h) {
Queue<Nodo> cola = new LinkedList<Nodo>();
Nodo origen = new Nodo(xO,yO,0);
cola.add(origen);
int dis=0;
while(!cola.isEmpty()&&dis<=10){
Nodo aux2=cola.remove();
if(aux2.x==xD&&aux2.y==yD){
return aux2.disActual;
}
int[][]mov={{1,0},{-1,0},{0,1},{0,-1}};
for(int i=0; i<4; i++){
Nodo aux=new Nodo(aux2.x,aux2.y,aux2.disActual);
int pasos=0;
while(estaEnMatriz(aux.x, aux.y, w, h)&&mat[aux.x][aux.y]!=1&&mat[aux.x][aux.y]!=3){
aux.x+=mov[i][0];
aux.y+=mov[i][1];
pasos++;
}
if(estaEnMatriz(aux.x, aux.y, w, h)&&(pasos>1||mat[aux.x][aux.y]==3)){
if(mat[aux.x][aux.y]==1){
mat[aux.x][aux.y]=0;
aux.x-=mov[i][0];
aux.y-=mov[i][1];
}
aux.disActual++;
cola.add(aux);
}
}
dis++;
}
return -1;
}
public static boolean estaEnMatriz(int x,int y, int w, int h){
return x>=0&&y>=0&&x<w&&y<h;
}
}