【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 ...
随机推荐
- 从CPU100%高危故障到稳定在10%:一个月的优化之旅,成功上线!
引言 经过三个月的开发,项目通过了所有测试并上线,然而,我们发现项目的首页几乎无法打开,后台一直发生超时错误,导致CPU过度负荷.在这次项目开发过程中,我制定了一份详细的技术优化方案.考虑到客户无法提 ...
- 复制对象句柄DuplicateHandle(文件占坑)
DuplicateHandle文档化解释 The DuplicateHandle function duplicates an object handle. The duplicate handle ...
- 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(中)
第 3 章 ASP.NET Core 核心特性 3.3 依赖注入 通常情况下,应用程序由多个组件构成,而组件与组件之间往往存在依赖关系 当我们需要获取数据时,通常的做法是实例化依赖的类,然后调用类里面 ...
- Python-pymysql操作MySQL数据库
一.安装pymysql py -m pip install pymysql; 二.pymysql数据库操作 1.简单示例 #coding=utf-8 import pymysql ## 打开数据库连接 ...
- NOI 2023 题解
Copper Loser 的题解-- Day1 T1 方格染色 有一个 \(n\times m\) 的网格,有 \(Q\) 次操作,每次形如有三种:将 \((x_i+j,y_i)\)/\((x_i,y ...
- 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)
目录 前言 一.代码优化 1.1Stream 流自分页 1.2数据库分页 1.3其它思考 二.硬件配置 2.1云服务器配置 三.文章小结 前言 OOM 几乎是笔者工作中遇到的线上 bug 中最常见的, ...
- 【Unity3D】血条(HP)
1 需求实现 人机交互Input 中实现了通过键盘控制坦克运动,通过鼠标控制坦克发射炮弹,本文将在此基础上,增加血条(HP)功能.炮弹命中后,HP 值会减少,因此需要应用到 刚体组件Rigidbo ...
- 掌握云容器网络:何为ipvs
本文分享自华为云社区<[理解云容器网络]2-基础篇-ipvs介绍>,作者: 可以交个朋友. IPVS简介 ipvs是工作在Linux内核态的4层负载均衡:和用户态的负载均衡软件(如ngin ...
- 使用 MSYS2 编译 exe 可执行程序
MSYS2 是一个在 Windows上 运行的软件环境,它提供了一种在 Windows 上使用 GNU 工具链的方式,包括 GCC 编译器和 GNU Make 构建系统. 在 MSYS2 中,你可以使 ...
- centos docker服务问题
概述 docker的应用版本正式上线,结果一上线就出各种幺蛾子. 本文档主要介绍centos系统安装docker和启动的问题解决方法. 环境 docker registry:2 centos 6 &a ...