//棋盘问题 public class Main { static int REScount = Integer.MAX_VALUE; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); int[][] arr = new int[n][m]; for(int i=0;i<k;i++){ int x = sc.nextInt(); int y = sc.nextInt(); arr[x][y] = 1; } HashSet<String> set = new HashSet<>(); int startX = 0; int stattY = 0; int endX = n-1; int endY = m-1; process(0,arr,set,startX,stattY,endX,endY); if(REScount == Integer.MAX_VALUE){ System.out.println(0); }else{ System.out.println(REScount); } } // public static void process(int count,int[][] arr,HashSet<String> set,int startX,int startY,int endX,int endY){ if(startX == endX && startY == endY){//到达终点 REScount = Math.min(count, REScount); return; }else if( startX<0 || startX>=arr.length || startY<0 || startY>=arr[0].length){//越界 return ; }else if(arr[startX][startY] ==1){//障碍物不能走 return; }else { String loc = startX+"+"+startY; if(set.contains(loc)){//已经走过 return ; }else{ set.add(loc);//添加次点 //上下左右走 process(count+1,arr,set,startX-1,startY,endX,endY); process(count+1,arr,set,startX+1,startY,endX,endY); process(count+1,arr,set,startX,startY-1,endX,endY); process(count+1,arr,set,startX,startY+1,endX,endY); set.remove(loc);//移除改点 } } } }
点赞 评论
牛客网
牛客企业服务