平凡


私信TA

用户名:uq_30153938431

访问量:8354

签 名:

等  级
排  名 921
经  验 3332
参赛次数 0
文章发表 16
年  龄 20
在职情况 学生
学  校 广西建设职业技术学院
专  业 网络技术

  自我简介:

已经升本了。

解题思路: 思路其实就是上下左右走,然后记录好路径就行了

注意事项:

参考代码:

private static boolean v[][];
    //这个是目标靶子数据
    private static int     l[][];
    //这个运行时候的靶子数据
    private static int     t[][];
    //控制方向
    private static int dif[][] = {{0,-1},{0,1},{-1,0},{1,0}};
    //记录路径
    private static int[][] walk;
    private static int n;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        v = new boolean[n][n];
        l = new int[2][n];
        t = new int[2][n];
        walk = new int[n][n];
        for (int i = 0; i < n; i++) {
            Arrays.fill(walk[i],-1);
        }
        //北边的靶子数
        for (int i = 0; i < n; i++) {
            l[0][i] = scanner.nextInt();
        }
        //西边的靶子数
        for (int i = 0; i < n; i++) {
            l[1][i] = scanner.nextInt();
        }
        dfs(0,0,0);
    }
    public static void dfs(int row,int col,int count){
        if (row < 0 || col < 0 ||row >= v.length || col >= v[0].length) return;
        if (v[row][col]) return;
        for (int k = 0; k < dif.length; k++) {
            v[row][col] = true;
            t[0][col] += 1;
            t[1][row] += 1;
            walk[row][col] = count++;
            if (row == n-1 && col == n-1) {
                boolean op = true;
                for (int i = 0; i < l.length; i++) {
                    for (int j = 0; j < l[i].length; j++) {
                        if (l[i][j] != t[i][j]) op = false;
                    }
                }
                if (op){
                    int cou = 0;
                    String pr = new String();
                    for (int i = 0; i < n; i++) {
                        for (int j = 0; j < n; j++) {
                            if (walk[i][j] == cou){
                                pr += i*n+j+" ";
                                i = 0;j =0 ;
                                cou++;
                            }
                        }
                    }
                    System.out.println(pr.substring(0,pr.length()-1));
                    return;
                }
            }
            
            dfs(row+dif[k][0],col+dif[k][1],count);
            v[row][col] = false;
            t[0][col] -= 1;
            t[1][row] -= 1;
            walk[row][col] = -1;
            count--;
        }
    }


 

0.0分

0 人评分

  评论区