Go to diff to previous submission
import java.util.*; import java.math.*; import java.io.*; import java.text.*; public class Grasshop { static int xspan, yspan, pos, x0, y0, xt, yt, steps; static ArrayList<int[]> nodes = new ArrayList<int[]>(); static ArrayList<int[]> newnodes = new ArrayList<int[]>(); static boolean[][] visited = new boolean[101][101]; static boolean foundEnd = false; static void examineOutnodes(int x, int y){ int xnew, ynew; // A xnew = x-2; ynew = y+1; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // A xnew = x+2; ynew = y+1; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // B xnew = x-2; ynew = y-1; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // B xnew = x+2; ynew = y-1; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // C/ xnew = x-1; ynew = y+2; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // C xnew = x-1; ynew = y-2; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // D xnew = x+1; ynew = y+2; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } // D xnew = x+1; ynew = y-2; if(valid(xnew,ynew) && !visited[xnew][ynew]){ newnodes.add(new int[]{xnew,ynew}); visited[xnew][ynew]=true; if(xnew==xt && ynew==yt) { foundEnd=true; return; } } } static void findWay(){ nodes.clear(); newnodes.clear(); // end == start if(xt==x0 && yt==y0){ steps=0; return; } if(!valid(xt,yt) || !valid(x0,y0)){ steps=-1; return; } visited[x0][y0] = true; nodes.add(new int[]{x0,y0}); while(foundEnd==false && !nodes.isEmpty()){ steps++; for(int[] node : nodes){ examineOutnodes(node[0],node[1]); } nodes.clear(); nodes.addAll(newnodes); newnodes.clear(); } if(!foundEnd) steps=-1; return; } static boolean valid(int x, int y){ return (x>=1 && x<=xspan && y>=1 && y<=yspan); } /** * @param args the command line arguments */ while( (line=br.readLine()) != null) { // nulovani for(int xi=1;xi<=xspan;xi++){ for(int yi=1;yi<=yspan;yi++){ visited[xi][yi] = false; } } foundEnd = false; steps = 0; findWay(); if(steps==-1) else } } }
--- c4.s635.cteam028.grasshop.java.0.Grasshop.java +++ c4.s638.cteam028.grasshop.java.0.Grasshop.java @@ -65,5 +65,5 @@ } } - // C + // C/ xnew = x-1; ynew = y+2; @@ -162,5 +162,5 @@ // nulovani for(int xi=1;xi<=xspan;xi++){ - for(int yi=1;yi<yspan;yi++){ + for(int yi=1;yi<=yspan;yi++){ visited[xi][yi] = false; }