当前位置: 首页 > news >正文

540C: Ice Cave

题目链接

题意:

n*m的地图,'X'表示有裂痕的冰块,'.'表示完整的冰块,有裂痕的冰块再被踩一次就会碎掉,完整的冰块被踩一次会变成有裂痕的冰块,

现在告诉起点和终点,问从起点能否走到终点并且使终点的冰块碎掉。不能原地跳。起点和终点可能会在同一个位置。

解题思路:

在只走‘.’的情况下把终点的冰踩碎

 

输入n*m的矩阵

以及走的开始和终点位置

在开始点,上下左右找‘.’,有就走,并把改点设置为‘X’,走到终点时候,若终点是‘X’则成功。

其他情况都失败。

 

这个程序是在codeforces上面抄的

Java程序:

import java.io.PrintWriter;
import java.util.Scanner;


public class C540 {
    static void run0() throws Exception {
        PrintWriter pw = new PrintWriter(System.out);
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        char[][] ch = new char[n][m];
        for(int i=0;i<n;i++)
            ch[i] = sc.next().toCharArray();
        int fromX = sc.nextInt() - 1;
        int fromY = sc.nextInt() -1;
        int toX = sc.nextInt() -1;
        int toY = sc.nextInt() -1;
        ch[fromX][fromY]='.';
        if(recur(ch,fromX,fromY,toX,toY)) pw.println("YES");
        else pw.println("NO");
        pw.close();
    }
    // 暴力破解,在四个方向做判断
    public static boolean recur(char[][] ch,int curX,int curY,int tX,int tY){
        // 越界失败
        if(curX<0 || curY<0 ||curX>=ch.length||curY>=ch[0].length) return false;
        // 走了回去,并且是在X的情况下,说明已经走了一次,或者 本来就是X
        if(curX==tX &&curY==tY &&ch[tX][tY]=='X') return true;
         // X 不可走
        if(ch[curX][curY]=='X') return false;
        // 是 点的 情况,可以走,走过设置为 X
         ch[curX][curY] = 'X';
        return recur(ch,curX-1,curY,tX,tY)||
               recur(ch,curX+1,curY,tX,tY)||
               recur(ch,curX,curY-1,tX,tY)||
               recur(ch,curX,curY+1,tX,tY);
    }
    
    public static void main(String[] args)  throws Exception{
        run0();
    }
}

上面的注释能很好的理解程序。

下面的程序和上面的差不多

也是复制别人的

import java.util.Scanner;


public class C540_1 {
    static int n;
    static int m;
    static char[][] map;
    static boolean[][] visited;
    static int pi[];
    static int pf[];
    static int[] R = new int[] {1, 0, -1, 0};
    static int[] C = new int[] {0, 1, 0, -1};
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n=sc.nextInt();
        m= sc.nextInt();
        map = new char[n][m];
        visited = new boolean[n][m];
        for(int i=0;i<n;++i){
            String s=sc.next();
            for(int j=0;j<m;j++){
                map[i][j] = s.charAt(j);
                visited[i][j] = false;
            }
        }
        pi = new int[]{sc.nextInt()-1,sc.nextInt()-1};
        pf = new int[]{sc.nextInt()-1,sc.nextInt()-1};
        if(dfs(pi[0],pi[1])) System.out.println("YES");
        else System.out.println("NO");
    }
    static boolean dfs(int r,int c){
        // 走过的点设置为 true 
        visited[r][c] = true;
        // 改点走后设置为 X 
        map[r][c]='X';
        for(int k=0;k<4;++k){
            int rr = r+R[k];
            int cc = c+C[k];
            if(rr>=0 && rr<n &&cc>=0 &&cc< m){
                if(rr==pf[0] &&cc==pf[1] &&map[rr][cc]=='X')
                    return true;
                // !=X  没有被访问过 ,当前点可以走
                else if(map[rr][cc]!='X' && visited[rr][cc] ==false &&dfs(rr,cc))
                    return true;
            }
        }
        return false;
    }
}

相关文章:

  • JavaScript判断IE版本
  • EditPlus自动补全、模板配置
  • 引子——从Mac OS X的Lion说起
  • 悠然乱弹:“最好的模板引擎”Beetl 剖析及与Tiny模板引擎对比
  • c# 反射类字段
  • Oracle 学习之RMAN(十四)恢复实战--基于时间点恢复
  • HAProxy+Keepalived实现Web服务器负载均衡
  • Java删除ArrayList中的重复元素的2种方法
  • 【LeetCode】66 67- Plus One Add Binary
  • 使用CodeIgniter框架搭建RESTful API服务
  • OSChina 周六乱弹 —— 宁泽涛让开!你挡着女神了!
  • LeetCode:Pow(x, n) - 求指定数字x的整数次幂
  • hdu4549(费马小定理 + 快速幂)
  • 1106 排序(类似求和求到手软)
  • django使用email进行身份验证
  • 《深入 React 技术栈》
  • Android交互
  • IDEA 插件开发入门教程
  • Javascript编码规范
  • JavaScript学习总结——原型
  • Leetcode 27 Remove Element
  • leetcode46 Permutation 排列组合
  • Making An Indicator With Pure CSS
  • mysql 数据库四种事务隔离级别
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PAT A1050
  • React组件设计模式(一)
  • vue脚手架vue-cli
  • 初识 webpack
  • 对JS继承的一点思考
  • 关于字符编码你应该知道的事情
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 阿里云ACE认证学习知识点梳理
  • 容器镜像
  • #pragma once
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (论文阅读30/100)Convolutional Pose Machines
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .Net6 Api Swagger配置
  • .NET开发者必备的11款免费工具
  • .NET微信公众号开发-2.0创建自定义菜单
  • .ui文件相关
  • ?
  • @WebService和@WebMethod注解的用法
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ 数据结构 - C++] AVL树原理及实现
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [CentOs7]图形界面