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. HDU 3594 The trouble of Xiaoqian 混合背包问题

    The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  2. C/C++(基础-运算符详解)

    运算符 任何表达式是有值的 int a = 2; int b = 3; a*=b+4;//a=a*(b+4);"*"*=的优先级层次和=号的层次一样. printf("% ...

  3. pidof---查找指定名称的进程的进程号id号。

    pidof命令用于查找指定名称的进程的进程号id号. 语法 pidof(选项)(参数) 选项 -s:仅返回一个进程号: -c:仅显示具有相同“root”目录的进程: -x:显示由脚本开启的进程: -o ...

  4. WPF转换器

    1. 前文 在普遍的也业务系统中, 数据要驱动到操作的用户界面, 它实际储存的方式和表达方式会多种多样, 数据库存储的数字 0或1, 在界面用户看到显示只是 成功或失败, 或者存储的字符.或更多的格式 ...

  5. 【技能】Ext.Viewport 实现左三右一排列方式。

    1.Extjs 布局非常是灵活.可是吐槽下CSS,太难重写,想自己重构一套都难哎... var viewport = new Ext.Viewport({ layout:'border', items ...

  6. Irrlicht 3D Engine 笔记系列 之 教程5- User Interface

    作者:i_dovelemon 日期:2014 / 12 / 18 来源:CSDN 主题:GUI 引言 今天.博主学习了第五个教程. 这个教程解说了怎样使用Irrlicht内置的一个基础模块.GUI模块 ...

  7. Chormium线程模型及应用指南

    核心概念 设计上遵循以下原则: 1 不要在UI线程做不论什么堵塞式的I/O操作,以及其他耗时的操作,通过消息传递把各种操作传给相应用途的线程去做. 2 不鼓舞线程加锁机制和线程安全对象. 对象仅仅存在 ...

  8. 5.使用SOAP的XML消息传递

    转自:https://blog.csdn.net/u014066037/article/details/51724658 使用SOAP的XML消息传递的简易流程图: 详细步骤如下: (1)服务请求者的 ...

  9. Android 用Socket实现PC和手机的文件传输

    PC服务器端代码: /* * PC与<a href="http://lib.csdn.net/base/android" class='replace_word' title ...

  10. BZOJ2160: 拉拉队排练(Manacher)

    Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训 ...