Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

假设你在一个n*n的冰面上,并且你想到达这个冰面的某处,可是由于冰面太滑了,所以当你向某个方向出发后,你没有办法使自己

停下来直到你碰到了某个障碍物——因为你可以抓住障碍物使得你的身体停止运动。

因为你已经知道了整个地图,所以你决定在行动之前先计算出最快可到达目标的路线,使得你可以不用走太多冤枉路,这时你决定编

程解决这个问题……

【输入格式】

第一行包括一个正整数n(n<=1000)

以下n行,每行包括n个数字(0或1),0表示该点为空地可以滑行,1表示该点为障碍物(障碍物无法穿过)。保证最外圈的地形为障

碍物,也就是你无法离开这个地图。

接下来1行包括2个整数x,y(1<=x,y<=n),表示一开始你处于坐标(x,y)

再接下来1行包括2个整数x2,y2(1<=x2,y2<=n),表示你想要到达的目标为(x2,y2)

【输出格式】

只有一个整数t,表示能到达目标的最短时间(假设每经过一次滑行需要花费1单位的时间,无论这次滑行距离的长短)。所谓到达目

标要求必须停留在(x2,y2),也就是你不能在到达之后被迫滑向下一个点。当你无法到达目标点时,你只须输出一行字符串’

impossible’。

样例1说明:由(2,2)到(2,3),再由(2,3)到(4,3),2次滑行到达终点。

Sample Input

5

1 1 1 1 1

1 0 0 1 1

1 0 0 0 1

1 0 0 0 1

1 1 1 1 1

2 2

4 3

Sample Output

2

Sample Input2

4

1 1 1 1

1 0 1 1

1 1 0 1

1 1 1 1

2 2

3 3

Sample Output2

impossible

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t052

【题解】



一开始判断一下起点和终点在不在障碍物上;如果其中之一在障碍物上就直接输出无解;

有可能起点和终点在同一个位置上;别搞笑了特判一下吧。

然后就4个方向搜一搜就好;

也不用判断边界;因为它保证了4个边界都有障碍;

用cin输入会GG..用更快的输入方式吧。

我好菜啊。一直在做水题;



【完整代码】

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <stack>
#include <string>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second typedef pair<int,int> pii;
typedef pair<LL,LL> pll; void rel(LL &r)
{
r = 0;
char t = getchar();
while (!isdigit(t) && t!='-') t = getchar();
LL sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} void rei(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)&&t!='-') t = getchar();
int sign = 1;
if (t == '-')sign = -1;
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
r = r*sign;
} const int MAXN = 1300;
const int dx[5] = {0,1,-1,0,0};
const int dy[5] = {0,0,0,-1,1};
const double pi = acos(-1.0); struct abc
{
int x,y,step;
}; int n,a0,b0,a1,b1,h[MAXN][MAXN];
bool bo[MAXN][MAXN];
queue <abc> dl; int main()
{
// freopen("F:\\rush.txt","r",stdin);
rei(n);
rep1(i,1,n)
rep1(j,1,n)
rei(h[i][j]);
rei(a0);rei(b0);rei(a1);rei(b1);
if (h[a0][b0]||h[a1][b1])
puts("imposiible");
else
{
bool ok = false;
memset(bo,false,sizeof(bo));
bo[a0][b0] = true;
if (bo[a1][b1])
{
puts("0");
return 0;
}
abc tt;
tt.x = a0,tt.y = b0,tt.step = 0;
dl.push(tt);
while (!dl.empty())
{
int x = dl.front().x,y = dl.front().y,s = dl.front().step;
dl.pop();
rep1(i,1,4)
{
int tx = x,ty = y;
while (!h[tx+dx[i]][ty+dy[i]])
tx+=dx[i],ty+=dy[i];
if (bo[tx][ty])
continue;
bo[tx][ty] = true;
tt.x = tx;tt.y = ty;tt.step=s+1;
dl.push(tt);
if (tx==a1 && ty==b1)
{
ok = true;
cout << s+1<<endl;
break;
}
}
if (ok) break;
}
if (!ok)
puts("impossible");
}
return 0;
}

【t052】冰岛的更多相关文章

  1. 前端学HTTP之字符集

    前面的话 HTTP报文中可以承载以任何语言表示的内容,就像它能承载图像.影片或任何类型的媒体那样.对HTTP来说,实体主体只是二进制信息的容器而已.为了支持国际性内容,服务器需要告知客户端每个文档的字 ...

  2. 2011奥斯卡最佳纪录片《监守自盗(Inside Job)》小结

    影片探讨了2008年金融危机产生的原因. 美国忽略1933年的旧法律,立新法,以放松金融监管. 投资银行被允许更高的杠杆率,33:1,也就是说,投资物跌价3%就会导致破产. 投资银行放贷,但是转手将贷 ...

  3. 【编码】_C#中编码名称(Name)与页面标识(CodePage)的关系_编码gb2312的获取

    在写C#代码时,发现VS提供没有直接提供gb2312的中文编码, 所以,需要找到对应编码名称的codepage来调用想要的编码方式. 下面是微软编程提供的所有编码信息,包括编码名称,编码代码页标识符, ...

  4. 【krpano】krpano xml资源解密(破解)软件说明与下载(v1.4)

    欢迎加入qq群551278936讨论krpano技术以及获取最新软件.   该软件已经不再维护,现在已经被KRPano资源分析工具取代,详情参见 http://www.cnblogs.com/reac ...

  5. 从英文变形规则计算到Restful Api设计

    ➠更多技术干货请戳:听云博客 一天在研究Restful API设计,命名的时候我总是很纠结,我相信大多数人也有这种感觉,不是说想不出来某个单词怎么写的问题,像我这种没事背单词背到13000词量的人也要 ...

  6. 动态加载多国语言 ---- cookie + 浏览器

    一.多国语言缩写列表 因为涉及到浏览器的可接收语言,所以需要知道各个国家的语言缩写. 这个百度一下即可. en 英文 en_US 英文 (美国) ar 阿拉伯文 ar_AE 阿拉伯文 (阿拉伯联合酋长 ...

  7. C# 字符编码类Encoding

    在网络通信中,很多情况下都是将字符信息转成字节序列进行传输.将字符序列转为字节序列的过程称为编码.当这些字节传送到接收方,接收方需要逆向将字节序列转为字符序列.这个过程就是解码. 常见编码有ASCII ...

  8. 世界国家 的数据库sql

    , '中国', 'CHINA'); , '阿尔巴尼亚', 'ALB'); , '阿尔及利亚', 'DZA'); , '阿富汗', 'AFG'); , '阿根廷', 'ARG'); , '阿拉伯联合酋长 ...

  9. Smali语法编程

    Smali背景: Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器.其语法是一种宽松式的Jasmin/dedexer语法,而 ...

随机推荐

  1. [Python] String Formatting

    One particularly useful string method is format. The format method is used to construct strings by i ...

  2. 缩放文本框ExpandTextView

    效果图: 代码: import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import ...

  3. Codeforces Round #316 (Div. 2) A B C

    A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  4. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)

    最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...

  5. jquery constructor(null)

    <!-- jQuery = function() { --> <!-- return new jQuery.fn.F(); --> <!-- }, --> < ...

  6. Filebeat的下载(图文讲解)

    第一步:进入Elasticsearch的官网 https://www.elastic.co/ 第二步:点击downloads https://www.elastic.co/downloads 第三步: ...

  7. javafx spring

    javafx spring http://files.cnblogs.com/files/rojas/airhacks_control.zip

  8. 给VG增加磁盘,给文件目录增加空间

    一: #lspv 找到新增加的物理卷(逻辑驱动器,以hdisk8为例). #chdev –l hdisk8 –a pv=yes写入新的物理卷的pvid. #extendvg cwdatavg hdis ...

  9. 【Codeforces Round #451 (Div. 2) D】Alarm Clock

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 尺取法+二分. 类似滑动窗口. 即左端点为l,右端点为r. 维护a[r]-a[l]+1总是小于等于m的就好. (大于m就右移左端点) ...

  10. 妙味css3课程---1-1、css中自定义属性可以用属性选择器么

    妙味css3课程---1-1.css中自定义属性可以用属性选择器么 一.总结 一句话总结:可以的. 1.如何实现用属性选择器实现a标签根据href里面含有的字段选择背景图片? p a[href*=te ...