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
mangelovski's solution for 400: GivesYouWings, written in Java, submitted on 09.05.2010 14:03:55
public class GivesYouWings { public boolean check(int a, int b, int maxa, int maxb){ if(a>=maxa) return false; if (b>=maxb)return false; if (b<0)return false; if (a<0)return false; return true; } public int solve(String[] maze){ int []dx = {0,1,0,-1}; int []dy = {1,0,-1,0}; int si=-1; int sj=-1; int ei=-1; int ej=-1; char[][]mz= new char[maze.length][maze[0].length()]; for(int i=0; i<maze.length; i++) for(int j=0;j<maze[0].length();j++){ mz[i][j]=maze[i].charAt(j); } int [][][]time= new int[maze.length][maze[0].length()][2]; for(int i=0; i<maze.length; i++) for(int j=0;j<maze[0].length();j++){ time[i][j][0]=-1; time[i][j][1]=512; if(maze[i].charAt(j)=='S') {si=i;sj=j;} if(maze[i].charAt(j)=='T') {ei=i;ej=j;} } for(int ij=0; ij<maze.length; ij++){System.out.println(); for(int ji=0;ji<maze[0].length();ji++){ System.out.print(mz[ij][ji]+" "); }} time[si][sj][0]=0; while(1==1){ int fl=0; for(int i=0; i<maze.length; i++) for(int j=0;j<maze[0].length();j++){ if(time[i][j][0]!=-1){ if(mz[i][j]=='*'){ mz[i][j]='.'; if(time[i][j][1]>1) time[i][j][1]=time[i][j][1]/2; } for(int k=0;k<4;k++){ if(check(i+dx[k],(j+dy[k]),maze.length,maze[0].length())){ if(mz[i+dx[k]][j+dy[k]]!='#'){ if((time[i+dx[k]][j+dy[k]][0]>time[i][j][1]+time[i][j][0])||(time[i+dx[k]][j+dy[k]][0]==-1)){ fl=1; time[i+dx[k]][j+dy[k]][0]=time[i][j][1]+time[i][j][0]; time[i+dx[k]][j+dy[k]][1]=time[i][j][1]; for(int ij=0; ij<maze.length; ij++){System.out.println(); for(int ji=0;ji<maze[0].length();ji++){ System.out.print(time[ij][ji][0]+" "); }} System.out.println(); } } } } } } if(fl==0) break; } return time[ei][ej][0]; } }