Go to diff to previous submission
import java.util.LinkedList; import java.util.Scanner; public class Main { public static final int[][] polePozic={{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2}}; while(sc.hasNext()){ int pocetRadek=sc.nextInt(); int pocetSloupcu=sc.nextInt(); int poziceSkokanaX=sc.nextInt(); int poziceSkokanaY=sc.nextInt(); int poziceMnamkyX=sc.nextInt(); int poziceMnamkyY=sc.nextInt(); int poleJizSkakano[][]=new int[pocetRadek+1][pocetSloupcu+1]; for(int i=0;i<pocetRadek;i++){ for(int j=0;j<pocetSloupcu;j++){ poleJizSkakano[i][j]=-1; } } poleJizSkakano[poziceSkokanaY][poziceSkokanaX]=0; // System.out.println(poleJizSkakano[5][5]); LinkedList<Integer> fronta = new LinkedList<Integer>(); fronta.add(poziceSkokanaX); fronta.add(poziceSkokanaY); boolean nalez=false; while(!fronta.isEmpty() && !nalez){ // System.out.println("aktx je "+aktX+"akty je "+aktY+" aktStep je "+aktStep); if((aktX ==poziceMnamkyX) && (aktY==poziceMnamkyY)){ nalez=true; }else{ aktStep++; for(int i=0;i<polePozic.length;i++){ int testX=aktX+polePozic[i][0]; int testY=aktY+polePozic[i][1]; if(((testX>=1) && (testX<=pocetSloupcu))&&((testY>=1)&&(testY<=pocetRadek))){ if(poleJizSkakano[testY][testX]<=0){ fronta.add(testX); fronta.add(testY); poleJizSkakano[testY][testX]=aktStep; } } } } } // System.out.println("dostalo se k ifu"); if(fronta.isEmpty() && !nalez){ } } } }
--- c4.s1200.cteam117.grasshop.java.0.Main.java +++ c4.s1301.cteam117.grasshop.java.0.Main.java @@ -1,3 +1,3 @@ -import java.util.ArrayList; +import java.util.LinkedList; import java.util.Scanner; @@ -18,11 +18,16 @@ int poziceMnamkyY=sc.nextInt(); - boolean poleJizSkakano[][]=new boolean[pocetRadek+1][pocetSloupcu+1]; - poleJizSkakano[poziceSkokanaY][poziceSkokanaX]=true; + int poleJizSkakano[][]=new int[pocetRadek+1][pocetSloupcu+1]; + for(int i=0;i<pocetRadek;i++){ + for(int j=0;j<pocetSloupcu;j++){ + poleJizSkakano[i][j]=-1; + } + } + + poleJizSkakano[poziceSkokanaY][poziceSkokanaX]=0; // System.out.println(poleJizSkakano[5][5]); - ArrayList<Integer> fronta = new ArrayList<Integer>(); + LinkedList<Integer> fronta = new LinkedList<Integer>(); fronta.add(poziceSkokanaX); fronta.add(poziceSkokanaY); - fronta.add(0); boolean nalez=false; @@ -30,5 +35,5 @@ Integer aktX=fronta.get(0); fronta.remove(0); Integer aktY=fronta.get(0); fronta.remove(0); - Integer aktStep=fronta.get(0); fronta.remove(0); + Integer aktStep=poleJizSkakano[aktY][aktX]; // System.out.println("aktx je "+aktX+"akty je "+aktY+" aktStep je "+aktStep); @@ -43,8 +48,8 @@ if(((testX>=1) && (testX<=pocetSloupcu))&&((testY>=1)&&(testY<=pocetRadek))){ - if(!poleJizSkakano[testY][testX]){ + if(poleJizSkakano[testY][testX]<=0){ fronta.add(testX); fronta.add(testY); - fronta.add(aktStep); + poleJizSkakano[testY][testX]=aktStep; } } @@ -54,5 +58,5 @@ } // System.out.println("dostalo se k ifu"); - if(fronta.isEmpty()){ + if(fronta.isEmpty() && !nalez){ System.out.println("impossible"); } @@ -62,16 +66,4 @@ -// private class Place{ -// public int x; -// public int y; -// public int step; -// -// public Place(int x, int y, int step){ -// this.x=x; -// this.y=y; -// this.step=step; -// } -// } -