【atcoder abc276 】(a* 搜索)
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* 搜索)的更多相关文章
- Atcoder Grand Contest 020 E - Encoding Subsets(记忆化搜索+复杂度分析)
Atcoder 题面传送门 & 洛谷题面传送门 首先先考虑如果没有什么子集的限制怎样计算方案数.明显就是一个区间 \(dp\),这个恰好一年前就做过类似的题目了.我们设 \(f_{l,r}\) ...
- 2018.09.18 atcoder Many Formulas(搜索)
传送门 感觉自己搜索能力退化了,这种弱智搜索写了整整5min,这样下去比赛会凉的. 看来得多练练题了. 代码: #include<bits/stdc++.h> #define ll lon ...
- Atcoder F - Mirrored(思维+搜索)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...
- 【Atcoder】AGC022 C - Remainder Game 搜索
[题目]C - Remainder Game [题意]给定n个数字的序列A,每次可以选择一个数字k并选择一些数字对k取模,花费2^k的代价.要求最终变成序列B,求最小代价或无解.n<=50,0& ...
- AtCoder Grand Contest 012 B Splatter Painting(记忆化搜索)
题意: 给一个包含N个顶点,M条边,无自环和重边的简单无向图,初始每个点颜色都为0,每条边的长度为1,连接着ai,bi两个节点.经过若干个操作, 每次将与某个点vi距离不超过di的所有点染成某种颜色c ...
- AtCoder Regular Contest 090
C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...
- Atcoder Beginner Contest 070 D - Transit Tree Path
题意:n个点,n-1条边,组成一个无向的联通图,然后给出q和k,q次询问,每次给出两个点,问这两个点之间的最短距离但必须经过k点. 思路:我当时是用优化的Dijkstra写的(当天刚学的),求出k点到 ...
- 【AtCoder】CODE FESTIVAL 2017 Final
A - AKIBA 模拟即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair ...
- 记第一场atcoder和codeforces 2018-2019 ICPC, NEERC, Northern Eurasia Finals Online Mirror
下午连着两场比赛,爽. 首先是codeforses,我和一位dalao一起打的,结果考炸了,幸亏不计rating.. A Alice the Fan 这个就是记忆化搜索一下预处理,然后直接回答询问好了 ...
- ATCODER ABC 099
ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...
随机推荐
- 小知识:Oracle中的层次查询
使用Oracle中的start with .. connect by prior ..语句可以轻松实现. 下面通过scott用户下的emp来做演示,使用自己的一个19c测试环境,结果发现默认并没有sc ...
- Linux-expect(以交互形式输入命令,实现交互通信)
1.expect简介 expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. 安装命令: yum install ex ...
- C#对于加密的一点整合 (AES,RSA,MD5,SHA256)
aes 对称加密 密钥必须是32字节 using System; using System.Security.Cryptography; using System.Text; namespace C ...
- 如何做好一个基础的搜索功能?记一个因客户大数据量而导致的后发先至Bug
壹 ❀ 引 上篇文章算是开了一个新系列,因为工作缘故,我基本每天都在跟各式各样的bug打交道.其实站在一个开发的角度,我想每个人应该都更喜欢创造新代码,创造新bug,而不是每天都泡在茫茫代码海洋中定位 ...
- JS leetcode 寻找旋转排序数组中的最小值 题解分析,你不得不了解的二分法
壹 ❀ 引 堕落了一天,那么接着来刷leetcode,今天做的一题不算复杂,题目来自leetcode153. 寻找旋转排序数组中的最小值,题目描述如下: 假设按照升序排序的数组在预先未知的某个点上进行 ...
- NC20240 [SCOI2005]互不侵犯KING
题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案. 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 输入描述 只有一行 ...
- springboot和jquery.form.js实现监听文件上传进度
说明 文件上传作为程序开发最常用的功能之一,上传进度展示也是必须的.但是有时候进度并不准,进度100%了实际上后台尚未接收完毕,本篇就介绍如何利用jquery的form插件来实时反馈文件上传进度. 实 ...
- python基础语法知识
1.多组输入没有结束标志的两种表示形式 #method1: try: while True: #代码 except EOFError: pass #method2: while True: try: ...
- 【Android 逆向】【攻防世界】easy-so
1. apk安装到手机,随便输入点内容,提示错误 2. jadx打开apk btn.setOnClickListener(new View.OnClickListener() { // from cl ...
- 常用Windows控制台命令
查看网络连接信息 1.查看所有网络连接 netstat -ano -a 显示所有连接和侦听端口. -n 以数字形式显示地址和端口号. -o 显示拥有的与每个连接关联的进程 ID. 详细的使用方式使用n ...