import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*; /**
*
* @author fishcanfly
*/
public class Main {
/**
* main入口由OJ平台调用
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int h, w;
String[] words = br.readLine().split("\\s+");
h = Integer.valueOf(words[0]);
w = Integer.valueOf(words[1]);
char[][] board = new char[h][w];
int[] source = new int[]{0, 0};
for (int i = 0; i < h; i++) {
board[i] = br.readLine().toCharArray();
for (int j = 0; j < w; j++) {
if (board[i][j] == 'S') {
source = new int[]{i, j};
}
}
}
br.close();
List<int[]> list = new ArrayList<>();
int[][] dx = new int[][]{
{0, 1}, {0, -1}, {1, 0}, {-1, 0}
};
for (int i = 0; i < 4; i++) {
int newx = source[0] + dx[i][0];
int newy = source[1] + dx[i][1]; if (newx >= 0 && newx < h && newy >= 0 && newy < w && board[newx][newy] == '.') {
list.add(new int[]{newx, newy});
}
} for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
// boolean[][] visited = new boolean[h][w];
int[] a1 = list.get(i);
int[] b1 = list.get(j);
if (travel(a1, b1, h, w, board)) {
System.out.println("Yes");
return;
}
}
} System.out.println("No");
} public static boolean travel(int[] source, int[] target, int h, int w, char[][] board) {
int max = 0;
boolean[][] visited = new boolean[h][w];
int x = source[0];
int y = source[1];
visited[x][y] = true;
PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
int distance1 = Math.abs(o1[0] - target[0]) + Math.abs(o1[1] - target[1]);
int distance2 = Math.abs(o2[0] - target[0]) + Math.abs(o2[1] - target[1]);
return o2[2] + distance2 - distance1 - o1[2];
}
});
queue.add(new int[]{x, y, 0}); while (!queue.isEmpty()) {
int[] u = queue.poll();
x = u[0];
y = u[1];
int d = u[2]; if (x == target[0] && y == target[1]) {
max = Math.max(max, d);
} int[][] dx = new int[][]{
{0, 1}, {0, -1}, {1, 0}, {-1, 0}
};
for (int i = 0; i < 4; i++) {
int newx = x + dx[i][0];
int newy = y + dx[i][1]; if (newx >= 0 && newx < h && newy >= 0 && newy < w && board[newx][newy] == '.' && !visited[newx][newy]) {
visited[newx][newy] = true;
queue.add(new int[]{newx, newy, d + 1});
}
} } return max >= 2;
}
}

【atcoder abc276 】(a* 搜索)的更多相关文章

  1. Atcoder Grand Contest 020 E - Encoding Subsets(记忆化搜索+复杂度分析)

    Atcoder 题面传送门 & 洛谷题面传送门 首先先考虑如果没有什么子集的限制怎样计算方案数.明显就是一个区间 \(dp\),这个恰好一年前就做过类似的题目了.我们设 \(f_{l,r}\) ...

  2. 2018.09.18 atcoder Many Formulas(搜索)

    传送门 感觉自己搜索能力退化了,这种弱智搜索写了整整5min,这样下去比赛会凉的. 看来得多练练题了. 代码: #include<bits/stdc++.h> #define ll lon ...

  3. Atcoder F - Mirrored(思维+搜索)

    题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...

  4. 【Atcoder】AGC022 C - Remainder Game 搜索

    [题目]C - Remainder Game [题意]给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价.要求最终变成序列B,求最小代价或无解.n<=50,0& ...

  5. AtCoder Grand Contest 012 B Splatter Painting(记忆化搜索)

    题意: 给一个包含N个顶点,M条边,无自环和重边的简单无向图,初始每个点颜色都为0,每条边的长度为1,连接着ai,bi两个节点.经过若干个操作, 每次将与某个点vi距离不超过di的所有点染成某种颜色c ...

  6. AtCoder Regular Contest 090

    C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...

  7. Atcoder Beginner Contest 070 D - Transit Tree Path

    题意:n个点,n-1条边,组成一个无向的联通图,然后给出q和k,q次询问,每次给出两个点,问这两个点之间的最短距离但必须经过k点. 思路:我当时是用优化的Dijkstra写的(当天刚学的),求出k点到 ...

  8. 【AtCoder】CODE FESTIVAL 2017 Final

    A - AKIBA 模拟即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair ...

  9. 记第一场atcoder和codeforces 2018-2019 ICPC, NEERC, Northern Eurasia Finals Online Mirror

    下午连着两场比赛,爽. 首先是codeforses,我和一位dalao一起打的,结果考炸了,幸亏不计rating.. A Alice the Fan 这个就是记忆化搜索一下预处理,然后直接回答询问好了 ...

  10. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

随机推荐

  1. Linux如何禁用透明大页

    环境: RHEL 6.5 + Oracle 11.2.0.4 RAC 1.确认透明大页是否开启 grep HugePage /proc/meminfo cat /sys/kernel/mm/redha ...

  2. Mac 上 snail svn 配置验证信息

    这样就不用每次都得输入svn的账号 和 密码了

  3. [Ngbatis源码学习][Spring] Spring 的资源管理 ResourceLoader

    在学习Ngbatis的源码时,看到了有关xml文件的加载,涉及到了资源的加载,对相关知识进行总结与整理. 1. 相关类 Resource AbstractResource ResourceLoader ...

  4. NC24048 [USACO 2017 Jan P]Promotion Counting

    题目链接 题目 题目描述 The cows have once again tried to form a startup company, failing to remember from past ...

  5. Linux进程通信 | 消息队列

    什么是消息队列? 假设你是一个快递员,你需要将货物从一个仓库运到另一个仓库.但是你发现自己的时间不够用,需要另外请一个人来帮忙.那么,你们之间如何进行协作呢? 一种方式是直接将货物全部交给对方,但这样 ...

  6. Error: testWhileIdle is true, validationQuery not set

    说明 使用springboot连接数据库,启动的时候报错:testWhileIdle is true, validationQuery not set.但是不影响系统使用,数据库等一切访问正常.记录备 ...

  7. golang获取windows版本和详细信息

    场景: 将木马丢到感染机运行后回连时希望返回感染机的操作系统信息.golang 可以通过runtime.OS获取到操作系统类型,但是无法获取详细的版本信息,如win7 win10等, 解决方案; 下面 ...

  8. docker自定义bridge网络

    >>> docker network create -d bridge bridge-net # 创建一个名为bridge-net的网络 # 测试,启动两个容器,并且接入到bridg ...

  9. HttpClient实现https调用

    在HttpClient 4.x版本中引入了大量的构造器设计模式 https请求建立详解 首先建立一个信任任何密钥的策略.代码很简单,不去考虑证书链和授权类型,均认为是受信任的: class AnyTr ...

  10. linux网络编程基础知识汇总(更新中)

    阿帕网 arpanet 阿帕网为美国国防部高级研究计划署开发的世界上第一个运营的封包交换网络,它是全球互联网的始祖. 局域网 LAN(Local Area Network ):通过路由器和交换机把计算 ...