importjava.util.LinkedList;classSolution{publicintsolution(int[][]maps){// Get map sizeintmapX=maps.length;intmapY=maps[0].length;System.out.printf("mapX:%d, mapY:%d",mapX,mapY);// Init varsboolean[][]visitedMap=newboolean[mapX][mapY];LinkedList<Position>nextQueue=newLinkedList<>();// Find pathvisitedMap[0][0]=true;nextQueue.offer(newPosition(0,0,1));while(nextQueue.size()!=0){// Get next positionPositionnextPos=nextQueue.poll();intnextX=nextPos.getX();intnextY=nextPos.getY();intnextDepth=nextPos.getDepth();// Check this position is goalif(nextX==mapX-1&&nextY==mapY-1){returnnextDepth;}// Enqueue next position to visitif((nextX+1<mapX)&&(maps[nextX+1][nextY]==1)&&(!visitedMap[nextX+1][nextY])){visitedMap[nextX+1][nextY]=true;nextQueue.offer(newPosition(nextX+1,nextY,nextDepth+1));}if((nextY+1<mapY)&&(maps[nextX][nextY+1]==1)&&(!visitedMap[nextX][nextY+1])){visitedMap[nextX][nextY+1]=true;nextQueue.offer(newPosition(nextX,nextY+1,nextDepth+1));}if((nextX-1>=0)&&(maps[nextX-1][nextY]==1)&&(!visitedMap[nextX-1][nextY])){visitedMap[nextX-1][nextY]=true;nextQueue.offer(newPosition(nextX-1,nextY,nextDepth+1));}if((nextY-1>=0)&&(maps[nextX][nextY-1]==1)&&(!visitedMap[nextX][nextY-1])){visitedMap[nextX][nextY-1]=true;nextQueue.offer(newPosition(nextX,nextY-1,nextDepth+1));}}// Not reachablereturn-1;}}classPosition{publicintx;publicinty;publicintdepth;publicPosition(intx,inty,intdepth){this.x=x;this.y=y;this.depth=depth;}publicintgetX(){returnx;}publicintgetY(){returny;}publicintgetDepth(){returndepth;}}
Solution 1
Description
BFS를 이용하여 탐색
DFS를 이용하여 탐색하면 모든 경로를 탐색후 최단거리 판별이 가능하지만, BFS를 이용하면 모든 경로를 탐색할 필요가 없음