import java.util.ArrayList; import java.util.Scanner; public class Main {     static ArrayList<Integer> result = new ArrayList<>();     public static void solution(int n, int m, int k, int[][] tone){         int[][] qipan = new int[n][m];         for(int i=0; i<k; i++)             qipan[tone[i][0]][tone[i][1]] = 1;         dfs(qipan, new boolean[n][m], 0, 0, 0, n, m);         int min = Integer.MAX_VALUE;         for(int i=0; i<result.size(); i++)             min = Math.min(min, result.get(i));         if(min == Integer.MAX_VALUE)             System.out.println(0);         else             System.out.println(min);     }     public static void dfs(int[][] dp, boolean[][] mark, int i, int j, int path, int n, int m){         if(i == n-1 && j == m-1){             result.add(path);             return;         }         if(i<0 || i>=n || j<0 || j>=m || dp[i][j] == 1 || mark[i][j] == true)             return;         mark[i][j] = true;         dfs(dp, mark, i+1, j, path+1, n, m);         dfs(dp, mark, i-1, j, path+1, n, m);         dfs(dp, mark, i, j+1, path+1, n, m);         dfs(dp, mark, i, j-1, path+1, n, m);         mark[i][j] = false;     }     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);         int n = scanner.nextInt();         int m = scanner.nextInt();         int k = scanner.nextInt();         int[][] tone = new int[k][2];         for(int i=0; i<k; i++)             for(int j=0; j<2; j++)                 tone[i][j] = scanner.nextInt();         solution(n, m, k, tone);     } } 棋盘最短路径。dfs找出所有路径,输出最小值
点赞 4

相关推荐

炫哥_:为什么都读硕士了?项目还是网上的项目(真心发问)
最后再改一次简历
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务