Register
|
Login
Home
News
Competitions
Practice
How to
Rankings
Calendar
Arena
CodeFu 2010
CodeFu'10 Highlights
Jazoon'10 Highlights
Schedule
Rules
Prizes
Results
Competitions
»
Main CodeFu Competitons
»
CodeFu 2010
»
Results
CodeFu 2010 Results
Final Round Results
prankmaster's solution for 400: GivesYouWings, written in Java, submitted on 09.05.2010 14:08:21
import java.util.LinkedList; import java.util.Queue; public class GivesYouWings { public static class tocka{ public int x; public int y; public int speed; public int redBull[][] = new int [31][31]; public tocka(int x,int y,int speed, int [][]redBull) { this.x=x; this.y=y; this.speed=speed; this.redBull=redBull; } public tocka(tocka x) { this.x=x.x; this.y=x.y; this.speed=x.speed; this.redBull=x.redBull; } } public static int solve(String[] maze) { int W=-1; int redBulls [][] = new int [31][31]; int endX=0; int endY=0; int startX=0; int startY=0; int speed = 256; Queue<tocka> red = new LinkedList(); int matrica[][] = new int[maze[0].length()][maze.length]; for(int i=0;i<maze.length;i++) for(int j=0;j<maze[0].length();j++) { if(maze[i].charAt(j)=='T') {matrica[j][i]=Integer.MAX_VALUE;endX=j;endY=i;} else if(maze[i].charAt(j)=='S') {matrica[j][i]=0;startX=j;startY=i;} else if(maze[i].charAt(j)=='.') matrica[j][i]=Integer.MAX_VALUE; else if(maze[i].charAt(j)=='*') {matrica[j][i]=Integer.MAX_VALUE;redBulls [j][i]=1;} else matrica[j][i]=W; } red.add(new tocka(startX,startY,speed,redBulls)); while(!red.isEmpty()) { tocka pom = red.remove(); if((pom.x-1)>=0 && matrica[pom.x-1][pom.y]!=W && matrica[pom.x-1][pom.y]>=(matrica[pom.x][pom.y]+pom.speed)) { tocka pom2 = new tocka(pom); matrica[pom.x-1][pom.y]=matrica[pom.x][pom.y]+pom.speed; if(pom.redBull[pom.x-1][pom.y]==1) { pom2.redBull[pom.x-1][pom.y]=0; pom2.speed/=2; } red.add(new tocka(pom.x-1,pom.y,pom2.speed,pom2.redBull)); } if(pom.x+1<maze[0].length() && matrica[(pom.x+1)][pom.y]!=W && matrica[(pom.x+1)][pom.y]>=(matrica[pom.x][pom.y]+pom.speed)) { tocka pom2 = new tocka(pom); matrica[pom.x+1][pom.y]=matrica[pom.x][pom.y]+pom.speed; if(pom.redBull[pom.x+1][pom.y]==1) { pom2.redBull[pom.x+1][pom.y]=0; pom2.speed/=2; } red.add(new tocka(pom.x+1,pom.y,pom2.speed,pom2.redBull)); } if((pom.y+1)<maze.length && matrica[pom.x][pom.y+1]!=W && matrica[pom.x][pom.y+1]>=(matrica[pom.x][pom.y]+pom.speed)) { tocka pom2 = new tocka(pom); matrica[pom.x][pom.y+1]=matrica[pom.x][pom.y]+pom.speed; if(pom.redBull[pom.x][pom.y+1]==1) { pom2.redBull[pom.x][pom.y+1]=0; pom2.speed/=2; } red.add(new tocka(pom.x,pom.y+1,pom2.speed,pom2.redBull)); } if((pom.y-1)>=0 && matrica[pom.x][pom.y-1]!=W && matrica[pom.x][pom.y-1]>=(matrica[pom.x][pom.y]+pom.speed)) { tocka pom2 = new tocka(pom); matrica[pom.x][pom.y-1]=matrica[pom.x][pom.y]+pom.speed; if(pom.redBull[pom.x][pom.y-1]==1) { pom2.redBull[pom.x][pom.y-1]=0; pom2.speed/=2; } red.add(new tocka(pom.x,pom.y-1,pom2.speed,pom2.redBull)); } } if(matrica[endX][endY]==Integer.MAX_VALUE) return -1; return matrica[endX][endY]; } }