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;
}
}
540C: Ice Cave的更多相关文章
- CF#301 C:Ice Cave(简单BFS)
C:Ice Cave 有一个m*n的地图,里面包含'.'表示完整的冰块,'X'表示有裂痕的冰块,当游戏者到达完整的冰块时,这个位置的冰块会变成有裂痕的冰块,如果到达有裂痕的冰块时,游戏者会进入下一关 ...
- CodeForces 540C Ice Cave (BFS)
http://codeforces.com/problemset/problem/540/C Ice Cave Time Limit:2000MS Memory Limit:262 ...
- CodeForces - 540C Ice Cave —— BFS
题目链接:https://vjudge.net/contest/226823#problem/C You play a computer game. Your character stands on ...
- (简单广搜) Ice Cave -- codeforces -- 540C
http://codeforces.com/problemset/problem/540/C You play a computer game. Your character stands on so ...
- DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave
题目传送门 /* 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. 若两 ...
- Codeforces Round #301 (Div. 2) C. Ice Cave BFS
C. Ice Cave Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/problem/C ...
- ice cave
Description You play a computer game. Your character stands on some level of a multilevel ice cave. ...
- ICE CAVE(BFS搜索(模拟))
Description You play a computer game. Your character stands on some level of a multilevel ice cave. ...
- CodeForces 540C Ice Cave (BFS)
题意:给定 n * m的矩阵,让你并给定初始坐标和末坐标,你只能走'.',并且走过的'.'都会变成'X',然后问你能不能在末坐标是'X'的时候走进去. 析:这个题,在比赛时就是没做出来,其实是一个水题 ...
随机推荐
- ASP.NET MVC中使用事务写法
一些项目中,会涉及到事务的写法,比如订单相关,订单成功,会涉及到产品的库存和账户金额的一些信息变动,当然,如果整个流程成功,那是没什么问题,关键是如果中间某一步骤出现bug了,那之前已执行的一些变动就 ...
- inout用法浅析
inout io_data; reg out_data; reg io_link; assign io_data=io_link? out_data:'bz; //当IO_data作为输入口使用时,一 ...
- SDOI2016 round1滚粗记
Day -1 刚刚从HN集训回来,感觉整个人萌萌哒.考前不断立flag——这次我一定会滚粗的,然后设想着滚粗之后文化课先补什么,浑浑噩噩的过了一天,晚上看到CA爷(娘)发了关于cena爆栈的问题,这时 ...
- cacti手册选译(1)
第一章 系统需求 Cacti需要你的系统安装一下软件: RRDTool版本1.0.49及以上,推荐1.4+ MYSQL5.x及以上版本 PHP5.1及以上 支持PHP的web Server如Apach ...
- C#绘制工行Logo
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Analyzer的报表复制、移动
制作Analyzer报表后,希望可以直接拷贝到其他机子上(无法通过网络连接到) 方法很简单: 1.进入Analyzer的数据库服务器设定页面,查找到连接的系统数据库是哪个 2.将该系统数据库备份出来 ...
- 理解CSS3里的Flex布局用法
一.Flex布局是什么? Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{ disp ...
- C# Winform常见的Editor及其它经验
1.新建一个自定义Editor,继承自.NET自带的Editor,override某些方法,再附加到属性中: public class MyCollectionEditor : CollectionE ...
- 2014ACM/ICPC亚洲区鞍山站 清华命题
A http://acm.hdu.edu.cn/showproblem.php?pid=5070 先跳过. B http://acm.hdu.edu.cn/showproblem.php?pid=50 ...
- BZOJ 3714: [PA2014]Kuglarz
Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+ ...