P1746 离开中山路
传送锚点:https://www.luogu.com.cn/problem/P1746
题目背景
《爱与愁的故事第三弹·shopping》最终章。
题目描述
爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在 \(x_1,y_1\) 处,车站在 \(x_2,y_2\) 处。现在给出一个 \(n \times n(n \le 1000)\) 的地图,\(0\) 表示马路,\(1\) 表示店铺(不能从店铺穿过),爱与愁大神只能垂直或水平着在马路上行进。爱与愁大神为了节省时间,他要求最短到达目的地距离(每两个相邻坐标间距离为 \(1\))。你能帮他解决吗?
输入格式
第 \(1\) 行包含一个数 \(n\)。
第 \(2\) 行到第 \(n+1\) 行:整个地图描述(\(0\) 表示马路,\(1\) 表示店铺,注意两个数之间没有空格)。
第 \(n+2\) 行:四个数 \(x_1,y_1,x_2,y_2\)。
输出格式
只有 \(1\) 行,即最短到达目的地距离。
样例 #1
样例输入 #1
3
001
101
100
1 1 3 3
样例输出 #1
4
提示
对于 \(20\%\) 数据,满足 \(1\leq n \le 100\)。
对于 \(100\%\) 数据,满足 \(1\leq n \le 1000\)。
思路
code
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int n;
const int maxn = 1e3 + 10;
char g[maxn][maxn];
int dist[maxn][maxn];
int x1, y1, x2, y2;
int dx[4] = { 1,0,0,-1 };
int dy[4] = { 0,1,-1,0 };
typedef pair<int, int> PII;
queue<PII> q;
void bfs(int x,int y) {//x、y为当前遍历点坐标
q.push({x,y});
while (!q.empty()){
auto t = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int nx = t.first + dx[i];
int ny = t.second + dy[i];
if (nx<0 || nx>=n || ny<0 || ny>=n) continue;
if (dist[nx][ny] != -1) continue;//dist不等于-1,代表走过这
if (g[nx][ny] == '1') continue;//店铺
q.push({nx,ny});
dist[nx][ny] = dist[t.first][t.second] + 1;
}
}
}
int main()
{
cin >> n;
memset(dist, -1, sizeof(dist));
for (int i = 0; i < n; i++) {
scanf("%s", g[i]);
}
cin >> x1 >> y1 >> x2 >> y2;
dist[x1 - 1][y1 - 1] = 0;//将x1和y1起始坐标标记为0
bfs(x1 - 1, y1 - 1);
cout << dist[x2 - 1][y2 - 1];
return 0;
}
P1746 离开中山路的更多相关文章
- 洛谷——P1746 离开中山路
P1746 离开中山路 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车离开中山路.现在爱与愁大神在x1,y1处,车站在x2,y2处.现 ...
- 洛谷 P1746 离开中山路
P1746 离开中山路 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车离开中山路.现在爱与愁大神在x1,y1处,车站在x2,y2处.现 ...
- 洛谷P1746 离开中山路
https://www.luogu.org/problemnew/show/P1746 思路:用广搜从起点开始,遍历所有可达的点,再往下遍历直到到达终点,所以能保证得到的结果一定是最优解 #inclu ...
- P1189 SEARCH—搜索
将这题加进来的原因 因为他的优化令人眼前一新! 题目传送门() 相似的题目之 血色先锋队 ↑这一题也要用到标记数组 优化!!! 对于一个位置, 如果他在同样的深度再一次被访问,那他接下来所走的路径,所 ...
- 基于JQuery的获取鼠标进入和离开容器方向的实现
做动画时,需要判断鼠标进入和退出容器的方向.网上找到的基于JQuery的实现方法,用函数封装了一下,写了一个示例.注意绑定鼠标事件用的是on(),所以JQuery版本需高于1.7. <!DOCT ...
- 离开Autodesk,开启新篇章
我已经离开了Autodesk,开启新篇章.在过去7年多时间中,我先后支持Autodesk 基础设施相关产品的开发,包括MapGuide/AIMS,Map3D,Civil 3D,Infraworks等, ...
- jquery自定义滚动条 鼠标移入或滚轮时显示 鼠标离开或悬停超时时隐藏
一.需求: 我需要做一个多媒体播放页面,左侧为播放列表,右侧为播放器.为了避免系统滚动条把列表和播放器隔断开,左侧列表的滚动条需要自定义,并且滚动停止和鼠标离开时要隐藏掉. 二.他山之石: 案例来自h ...
- jquery 离开页面提示信息
<script> $(window).bind('beforeunload', function () { return '您输入的内容尚未保存,确定离开此页面吗?'; });</s ...
- 用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示。
用jQuery做一个三级菜单,鼠标移动到二级菜单的选项上,然后再迅速离开后,当鼠标再移动到该一级菜单或其他二级菜单选项,三级菜单也会显示. 原因:在为一个元素绑定hover事件之后,用户把光标移入元素 ...
- 怎么使用jquery阻止页面的离开或卸载
//绑定beforeunload事件$(window).bind('beforeunload',function(){return '您输入的内容尚未保存,确定离开此页面吗?';});//解除绑定,一 ...
随机推荐
- Qt:MD5加密
#include <QCryptographicHash> QString source_value = "123456"; // 待加密原始数据 QCryptogra ...
- JS实现文件转base64
核心: function file2base64(){ fileAddress = document.getElementById("fileImage").files[0]; f ...
- Mysql之innodb架构
Innodb存储引擎的架构 内存结构 Bufer Pool 缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载 ...
- js 闭包(新)
前言 旧的没有搬过来,先写一下新的感悟. 正文 ECMAScript中,闭包指的是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文的数据保存起来了.哪怕是简单的全局变量也是如此,因为函 ...
- 重新点亮linux 命令树————二进制安装[十一八]
前言 简单介绍一下二进制安装 正文 wget https://openresty.org/download/openresty-1.15.8.1.tar.gz tar -zxf openresty-V ...
- Python - PEP572: 海象运算符
海象运算符 PEP572 的标题是「Assignment Expressions」,也就是「赋值表达式」,也叫做「命名表达式」 不过它现在被广泛的别名是「海象运算符」(The Walrus Opera ...
- 最简编译CockroachDB 21.2
编译CockroachDB比较麻烦,尤其是从git下载代码编译还需要关联项目的下载,本文整理从官网下载代码的编译过程,非常简单,几乎没有异常,供大家参考. 编译CockroachDB 21.2 1.安 ...
- (react)获取json数据与传入(antd配合)
import React from 'react'; import {fetch} from 'whatwg-fetch'; // import {HashRouter as Router,Route ...
- 力扣275(jav&python)-H 指数 II(中等)
题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 .计算并返回该研究者的 h 指数. h ...
- DataFunTalk:阿里建设一站式实时数仓的经验分享
简介: 本文内容整理于阿里资深技术专家姜伟华在DataFunTalk上的演讲,为大家介绍阿里巴巴基于一站式实时数仓Hologres建设实时数仓的经验和解决方案. 导读:大数据计算正从规模化走向实时化, ...