添加路障-蓝桥杯-DFS

自己另辟蹊径想的新思路 果然好像还是不太行呀

java 复制代码
import java.util.Scanner;

public class Main {
    static int T;//样例组数
    static int n;//矩阵大小
    static int[] X = {0,1,0,-1};
    static int[] Y = {1,0,-1,0};
    static int[] X1 = {1,0,-1,0};
    static int[] Y1 = {0,-1,0,1};
    static int flag = 0;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        T = scan.nextInt();
        while((T--)>0)
        {
            n = scan.nextInt();
            char[][] arr = new char[n][n];
            int[][] vis = new int[n][n];
            for(int i = 0;i<n;i++)
            {
                arr[i] =scan.next().toCharArray();
            }
            if(!dfs(0,0,vis,arr,n))//第一次就不通
            {
                System.out.println(0);
            }
            else
            {
                dfs1(0,0,vis,arr,n);//第二次标记
                int[][] vis1 = new int[n][n];
                if(dfs(0,0,vis1,arr,n))
                {
                    System.out.println(2);
                }
                else
                {
                    System.out.println(1);
                }
            }
        }
    }
    static boolean dfs(int x,int y,int[][] vis,char[][] arr,int n)
    {
        if(arr[x][y] == 'C') return true;
        if(arr[x][y]!='A') vis[x][y] = 1;
        for(int i = 0;i<4;i++)
        {
            int x1 = x + X[i];
            int y1 = y + Y[i];
            if(x1>=0&&x1<n&&y1>=0&&y1<n&&vis[x1][y1]==0&&arr[x1][y1]!='X')
            {
                if(dfs(x1,y1,vis,arr,n)) return true;
            }
        }
        return false;
    }
    static boolean dfs1(int x,int y,int[][] vis,char[][] arr,int n)
    {
        if(arr[x][y] == 'C' ) return true;
        if(arr[x][y]!='A') vis[x][y] = 2;
        for(int i = 0;i<4;i++)
        {
            int x1 = x + X1[i];
            int y1 = y + Y1[i];

            if(x1>=0&&x1<n&&y1>=0&&y1<n&&vis[x1][y1]==1&&arr[x1][y1]!='X')
            {
                arr[x1][y1] = 'X';
                return true;
            }

            if(x1>=0&&x1<n&&y1>=0&&y1<n&&vis[x1][y1]!=2&&arr[x1][y1]!='X')
            {
                if(dfs1(x1,y1,vis,arr,n)) return true;
            }
        }
        return false;
    }
}
相关推荐
网络安全-杰克2 小时前
2026面试自动化测试面试题【含答案】
自动化测试·软件测试·面试·职场和发展
努力学算法的蒟蒻3 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
CodeSheep程序羊4 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
学历真的很重要4 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师
hqyjzsb5 小时前
盲目用AI提效?当心陷入“工具奴”陷阱,效率不增反降
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·远程工作
仟濹5 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
仟濹6 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
YuTaoShao7 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
VT.馒头7 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
网络安全-杰克8 小时前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展