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'的时候走进去. 析:这个题,在比赛时就是没做出来,其实是一个水题 ...
随机推荐
- OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法
字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 ...
- 如何把bootstrap用webpack打包
今天下载了一个anguarl2写后台,一直没有找到是如何使用bootstrap样式的,然后就全文做了搜索,发现有一段代码 import 'bootstrap-loader'; 这段代码很可疑,所以就查 ...
- springboot快速搭建
环境 spring-boot-starter-parent 是一个特殊的starter,它提供了有用的Maven默认设置.同时,它也提供了一个 dependency-management 节点,这样对 ...
- P2763: [JLOI2011]飞行路线
然而WA了呀,这道分层图,也是不明白为什么WA了=-= ; maxn=; points=; type node=record f,t,l:longint; end; var n,m,k,i,j,u,v ...
- comparing-html5-mobile-ui-frameworks
http://html5hub.com/comparing-html5-mobile-ui-frameworks/
- “来用”alpha版使用说明书
1引言 1 .1编写目的 针对我们发布的alpha版本做出安装和使用说明,使参与内测的人员及用户了解软件的使用方法和相关内容. 1 .2参考资料 <c#程序设计基础>,赵敏主编,2011, ...
- 第一个完整的cppunit单元测试程序
在极限编程中,测试程序本应该在编写主程序之前就要写好,然后将写好的类程序放在测试程序中进行测试,但考虑到项目中需求文档等并未将接口定义好,我无从开始,而且,自己对单元测试也是刚刚熟悉,需要一边写测试程 ...
- 双系统修改启动项顺序&&&修改开机启动等待时间
1. 双系统修改启动项顺序 更改/etc/grub.d目录 下的文件名是可行的 默认情况下Windows 7对应的文件名是30_os-prober,第一个linux系统对应的是10- ...
- php7+apache的环境安装配置
因为刚开始接触php,所以要对php的开发环境进行搭建. 1.首先到Apache的官网下载最新版: http://httpd.apache.org/download.cgi: 参照该网址配置Apach ...
- android开发 ,对接支付宝,服务器(PHP)校验失败
已备忘记,资料链接: http://my.oschina.net/u/256646/blog/174222 注意: 里面有一个设计到支付宝公钥的地方: 注 意这个是2048位的公钥应该是9行或者10行 ...