zoukankan      html  css  js  c++  java
  • 度小满0920

    多组数据,第1行有1个正整数T,表示有T组数据。(T<=100)
    
    对于每组数据,第1行有两个整数N和M。(1<=N, M<=1000)
    
    接着N行,每行有一个长度为M的字符串,表示N*M的迷宫。
    输出一个整数,表示使用特异功能的最少次数。如果小昆虫不能走出迷宫,则输出-1。
    假设小昆虫在一个N*M的迷宫中,"@"代表小昆虫的初始位置,"."代表可以通过的空地,"*"代表可以破坏的障碍物,
    "#"代表不可破坏的障碍物。请问小昆虫最少需要使用多少次特异功能才可以逃出迷宫?
    3
    3 3
    ###
    #@*
    ***
    3 4
    ####
    #@.*
    **.*
    3 3
    .#.
    #@#
    .#.
    
    public class Main02 {
        public static int[] findStartPos(char[][] grid, int n, int m) {
            for(int i=0; i < n; i++) {
                for(int j=0; j < m; j++) {
                    if(grid[i][j] == '@')
                        return new int[]{i,j};
                }
            }
            return new int[] {};
        }
        static int[] dx = new int[] {0,0,1,-1};
        static int[] dy = new int[] {1,-1,0,0};
        static boolean[][] used ;
        static int result ;
        public static void solve(char[][] grid, int n, int m, int x, int y, int res) {
            if(x < 0 || x >= n || y < 0 || y >= m) {
                //System.out.println(Arrays.deepToString(used));
                result = Math.min(res, result);
                return ;
            }
            if(grid[x][y] == '#' || used[x][y] == true) return ;
            if(grid[x][y] == '*') res++;
            used[x][y] = true;
            for(int i=0; i < 4; i++) {
                int xx = x + dx[i], yy = y + dy[i];
                solve(grid, n, m, xx, yy, res);
            }
            used[x][y] = false;
        }
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int times = sc.nextInt();
            while(times-- > 0) {
                int n = sc.nextInt(), m = sc.nextInt();
                char[][] grid = new char[n][m];
                for(int i=0; i < n; i++)
                    grid[i] = sc.next().toCharArray();
                int[] xy = findStartPos(grid, n,m);
                used = new boolean[n][m];
                result = Integer.MAX_VALUE;
                int x= xy[0], y = xy[1];
                solve(grid,n,m,x,y,0);
                if(result == Integer.MAX_VALUE) {
                    System.out.println(-1);
                }else{
                    System.out.println(result);
                }
            }
        }
    
    }
    

    回溯一定别忘了跳出循环!!!!!!!!!!!!!!!!!!!!!

    public class Main01 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            char[] a = sc.next().toCharArray();
            char[] b = sc.next().toCharArray();
            int[] cntA = new int[26];
            int[] cntB = new int[26];
            for(int i=0; i < a.length; i++)
                cntA[a[i]-'A'] ++;
            for(int i=0; i < b.length; i++)
                cntB[b[i]-'A'] ++;
            //System.out.println(Arrays.toString(cntA));
            int res = 0;
            for(int i=0; i < 26; i++)
                res += Math.min(cntA[i],cntB[i]);
            System.out.println(res);
        }
    }
    
  • 相关阅读:
    引入其他字体库 和 字体样式设置
    onmousemove鼠标截取
    最大、最小值
    ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法
    时间戳
    JS性能优化 -- 函数节流
    css兼容问题
    上传文件(ajax结合form表单)
    文件下载
    input上传指定类型的文件
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13702772.html
Copyright © 2011-2022 走看看