fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Codechef {
  6. public static int bfs(char[][] grid,int n,int m) {
  7. if (grid[0][0]=='#'||grid[n-1][m-1]=='#')return -1;
  8.  
  9. Queue<int[]>q=new LinkedList<>();
  10. boolean[][]visited=new boolean[n][m];
  11. q.add(new int[]{0,0,0});
  12. visited[0][0]=true;
  13. int[][]dirs={{1,0},{-1,0},{0,1},{0,-1}};
  14.  
  15. while(!q.isEmpty()){
  16. int[]cell=q.poll();
  17. int r=cell[0], c=cell[1], dist=cell[2];
  18. if (r==n-1 && c==m-1)return dist;
  19. for (int[]d:dirs){
  20. int nr= r+d[0], nc=c+d[1];
  21. if (nr>=0 && nr<n && nc>=0 && nc<m && !visited[nr][nc] && grid[nr][nc]=='.'){
  22. visited[nr][nc]=true;
  23. q.add(new int[]{nr,nc,dist+1});
  24. }
  25. }
  26. }
  27. return -1;
  28. }
  29.  
  30. public static void main (String[] args) throws java.lang.Exception
  31. {
  32. // your code goes here
  33. Scanner sc=new Scanner(System.in);
  34. int n=sc.nextInt();
  35. int m=sc.nextInt();
  36. sc.nextLine();
  37. char[][]grid=new char[n][m];
  38. for (int i=0;i<n;i++){
  39. String val=sc.nextLine();
  40. for (int j=0;j<m && j<val.length();j++){
  41. grid[i][j]=val.charAt(j);
  42. }
  43. }
  44. int out=bfs(grid,n,m);
  45. System.out.println(out);
  46. sc.close();
  47. }
  48. }
Success #stdin #stdout 0.15s 56568KB
stdin
2 4
...#
##..
stdout
4