算法

陷阱方格

2025-11-02  本文已影响0人  何以解君愁

 房间由XY的方格组成,例如下图为64的大小。每一个方格以坐标(x, y)描述。
 机器人固定从方格(0, 0)出发,只能向东或者向北前进。
 出口固定为房间的最东北角,如下图的方格(5, 3)。用例保证机器人可以从入口走到出口。
 房间有些方格是墙壁,如(4,1),机器人不能经过那儿。
 有些地方是一旦到达就无法走到出口的,如标记为B的方格,称之为陷阱方格。
 有些地方是机器人无法到达的,如标记为A的方格,称之为不可达方格,不可达方格不包括墙壁所在的位置。
 输入描述:
  第一行为房间的X和Y (0 < X,Y <= 1000)
  第二行为房间中墙壁的个数N (0 <= N < X*Y)
  接着下面会有N行墙壁的坐标
 输出描述:陷阱方格与不可达方格数量,两个信息在一行中输出,以一个空格隔开。(结尾不带回车换行)

//思路,先计算第一次遍历过去的情况,把所有能达到的地方记录,总的减去这些减去障碍物就是不可达;
//第二次从最终点往回,记录所有第一次有记录的数,然后第一次的减去第二次的就是陷阱
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        // x y
        int x = sc.nextInt();
        int y = sc.nextInt();
        //障碍数量
        int n = sc.nextInt();
        //网格
        int[][] xy = new int[x][y];
        for(int i = 0;i < n;i++){
            int xTemp = sc.nextInt();
            int yTemp = sc.nextInt();
            if(xTemp >= 0&&xTemp < x&&yTemp >= 0&&yTemp < y){
                xy[xTemp][yTemp] = 1;
            }
            //好像没非法处理
        }
        //统计能走到的空白块
        int white = 0;
        white += dfs(xy,x,y,0,0);
        //总的减去它和障碍数量就是不可达
        int res1 = x*y - white - n;
        //反向统计上一次的能走的的能到达区域,不能到就是陷阱
        int white1 = 0;
        white1 +=  dfs1(xy,x,y,x-1,y-1);
        int res2 = white - white1;
        System.out.print(res2 + " " + res1);
    }
    
    public static int dfs(int[][] xy,int x,int y,int i,int j){
        if(i < 0||j < 0||i >= x||j >= y||xy[i][j] == 1||xy[i][j] == 2){
            return 0;
        }
        //遍历后标记2,方便统计陷阱
        xy[i][j] = 2;
        int area = 1;
        area += dfs(xy,x,y,i + 1,j);
        area += dfs(xy,x,y,i,j + 1);
        return area;
    }
    
    public static int dfs1(int[][] xy,int x,int y,int i,int j){
        if(i < 0||j < 0||i >= x||j >= y||xy[i][j] == 1||xy[i][j] == 0){
            return 0;
        }
        //遍历后标记2改为0,方便遍历
        xy[i][j] = 0;
        int area = 1;
        area += dfs1(xy,x,y,i - 1,j);
        area += dfs1(xy,x,y,i,j - 1);
        return area;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读