题目链接

题意:

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的更多相关文章

  1. CF#301 C:Ice Cave(简单BFS)

    C:Ice Cave 有一个m*n的地图,里面包含'.'表示完整的冰块,'X'表示有裂痕的冰块,当游戏者到达完整的冰块时,这个位置的冰块会变成有裂痕的冰块,如果到达有裂痕的冰块时,游戏者会进入下一关 ...

  2. CodeForces 540C Ice Cave (BFS)

    http://codeforces.com/problemset/problem/540/C       Ice Cave Time Limit:2000MS     Memory Limit:262 ...

  3. CodeForces - 540C Ice Cave —— BFS

    题目链接:https://vjudge.net/contest/226823#problem/C You play a computer game. Your character stands on ...

  4. (简单广搜) Ice Cave -- codeforces -- 540C

    http://codeforces.com/problemset/problem/540/C You play a computer game. Your character stands on so ...

  5. DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave

    题目传送门 /* 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. 若两 ...

  6. 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 ...

  7. ice cave

    Description You play a computer game. Your character stands on some level of a multilevel ice cave. ...

  8. ICE CAVE(BFS搜索(模拟))

    Description You play a computer game. Your character stands on some level of a multilevel ice cave. ...

  9. CodeForces 540C Ice Cave (BFS)

    题意:给定 n * m的矩阵,让你并给定初始坐标和末坐标,你只能走'.',并且走过的'.'都会变成'X',然后问你能不能在末坐标是'X'的时候走进去. 析:这个题,在比赛时就是没做出来,其实是一个水题 ...

随机推荐

  1. DataView usage combind with event and ViewModel From ERP-DEV

    reflesh the selected item in DataView when we use DataView to display a set of data. Generally, we b ...

  2. AUTH过程

    INITIALIZE UPDATE: 在安全通道的显式发起期间,INITIALIZEUPDATE命令用于在卡和主机之间传送卡和会话数据.这个命令开始一个安全通道会话的发起. CPURESET() // ...

  3. js之基本包装类型

    为了便于操作“基本类型值”,JS 提供了 三个 特殊的引用类型:Boolean.Number.String.这些类型和其他引用类型相似,但同时 也具备 与各自基本类型相应的特殊行为. 实际上:每当读取 ...

  4. 线程生命周期状态UML图

  5. NYOJ-235 zb的生日 AC 分类: NYOJ 2013-12-30 23:10 183人阅读 评论(0) 收藏

    DFS算法: #include<stdio.h> #include<math.h> void find(int k,int w); int num[23]={0}; int m ...

  6. JS控制图片拖动 放大 缩小 旋转 支持滚轮放大缩小 IE有效

    <html> <head>     <title>图片拖动,放大,缩小,转向</title> <script type="text/ja ...

  7. Web流程

    Web阻塞加载,异步加载. 延迟执行,立即执行. 加载并执行,不要调用代码. 加载并执行时会调用代码,但是加载并执行时不要调用代码,否则会改变逻辑. 上面是Web流程,JS只是web的一部分.如果关注 ...

  8. c3p0 --2

    c3p0号称是java界最好的数据池. c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p ...

  9. Firefly卡牌手游《暗黑世界V1.5》服务器端源码+GM管理后台源码

    http://www.9miao.com/content-6-304.html Firefly卡牌手游<暗黑世界V1.5>服务器端源码+GM管理后台源码 关于<暗黑世界V1.5> ...

  10. Ambient Occlusion

    一般在光照模型中,ambient light的计算方法为:A = l * m,其中l表示表面接收到的来自光源的ambient light的总量,而m表示表面接收到ambient light后,反射和吸 ...