P1143 飘飘乎居士的约会
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

 一阵狂风吹过 
 只听“pong”的一声,飘飘乎居士降落了!!!

描述

又是美妙的一天,这天飘飘乎居士要和MM约会,因此他打扮的格外帅气。但是,因为打扮的时间花了太久,离约会的时间已经所剩无几。
幸运的是,现在飘飘乎居士得到了一张n*m的地图,图中左上角是飘飘乎居士的位置,右下角是约会的地点。‘.’代表马路,‘*’代表房屋。飘飘乎居士只能沿着‘.’行走(也就是不能踏入‘*’),而且行走的方向只能为上下左右的相邻格子。为了不让MM等待太久,飘飘乎居士在整个过程中可能会使用一次飘飘神功(也可能不使用,但最多使用一次),使用飘飘神功后,飘飘乎居士可以走进房屋一次(也就是在全程的行走中最多可以走一个‘*’,注意,只有一个);
   现在飘飘乎居士想要知道最少需要走多少步,飘飘乎居士才能到达约会的地点。

输入格式

第一行,2个正整数 n和m,表示一个n*m的矩阵
     接下来n行,每行m个字符,字符一定为 ’.’ 或者是‘*’ ,分别代表马路和房屋。
     输入数据保证左上角和右下角都为‘.’

输出格式

一行,如果可以到达,则输入需要行走的最少步数(飘飘神功也记为一步)
            如果不可以到达,则输出‘no’

测试样例1

输入

样例输入1 
3 3 
.*. 
... 
...

样例输入2 
3 3 
.** 
*** 
**.

输出

样例输入1 
4

样例输入2 
no

备注

0<N M <=1000飘飘乎居士——violet hill

每个点存两个状态:用过飘飘神功和没有用过。BFS第一次搜到终点的解就是最优解。

因为队列数组开小RE了一个点,差点1A

 /*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
int mx[]={,,,,-},
my[]={,,,-,};
int n,m;
int mp[mxn][mxn];
bool vis[mxn][mxn][];
int qx[mxn*],qy[mxn*],flag[mxn*],dis[mxn*];
int hd=,tl=;
int mxans=;
void BFS(){
qx[++hd]=;qy[hd]=;dis[hd]=;
while(hd<=tl){
for(int i=;i<=;i++){
int nx=qx[hd]+mx[i];
int ny=qy[hd]+my[i];
int nflag=flag[hd];
if(nx==n && ny==m){
mxans=min(mxans,dis[hd]+);
continue;
}
if(nx> && nx<=n && ny> && ny<=m){
if(!mp[nx][ny]){
if(!vis[nx][ny][nflag]){
vis[nx][ny][nflag]=;
qx[++tl]=nx;
qy[tl]=ny;
flag[tl]=nflag;
dis[tl]=dis[hd]+;
}
}
else{
if(!nflag){
vis[nx][ny][]=;
qx[++tl]=nx;
qy[tl]=ny;
flag[tl]=;
dis[tl]=dis[hd]+;
}
}
}
}
hd++;
}
}
int main(){
scanf("%d%d",&n,&m);
int i,j;
char c[];
for(i=;i<=n;i++){
scanf("%s",c);
for(j=;j<=m;j++)
if(c[j-]=='*')mp[i][j]=;
}
BFS();
if(mxans==)printf("no\n");
else printf("%d\n",mxans);
return ;
}

P1143 飘飘乎居士的约会的更多相关文章

  1. [JOY]1143 飘飘乎居士的约会

    题目描述 又是美妙的一天,这天飘飘乎居士要和MM约会,因此他打扮的格外帅气.但是,因为打扮的时间花了太久,离约会的时间已经所剩无几. 幸运的是,现在飘飘乎居士得到了一张nm的地图,图中左上角是飘飘乎居 ...

  2. TYVJ1288 飘飘乎居士取能量块 -SilverN

    描述   9月21日,今天是pink的生日,飘飘乎居士当然要去别人的领土大闹一番啦!  为了收集更多的能量到pink家大闹,飘飘乎居士准备从后花园中取出自己多年积攒的p个能量块.后花园一共被划分n个地 ...

  3. tyvj P1517 飘飘乎居士的乌龟(最大流)

    P1517 飘飘乎居士的乌龟 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 飘飘乎居士养了乌龟.当然,这些乌龟是用来出售赚取利润的. 描述 飘飘乎居士的乌龟 ...

  4. TYVJ 1288 飘飘乎居士取能量块

    背景 9月21日,pink生日:9月22日,lina生日:9月23日,轮到到飘飘乎居士(狂欢吧,(^__^) 嘻嘻--). 描述 9月21日,今天是pink的生日,飘飘乎居士当然要去别人的领土大闹一番 ...

  5. tyvjP1288 飘飘乎居士取能量块

    P1288 飘飘乎居士取能量块 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 9月21日,pink生日:9月22日,lina生日:9月23日,轮到到飘飘乎居 ...

  6. tyvj1468 清理垃圾

    背景 聚会结束,留下许多垃圾.Candy:"好多垃圾啊,飘飘乎居士,我们一起处理垃圾吧!" 描述     Candy家里总共有n个垃圾等待处理,每个垃圾对于Candy和飘飘乎居士处 ...

  7. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

  8. 【TYVJ】1467 - 通向聚会的道路(spfa+特殊的技巧)

    http://tyvj.cn/Problem_Show.aspx?id=1467 这题我并不是看题解a的.但是确实从题解得到了启发. 一开始我就想到一个正解,设d[i][0]表示i开始走过奇数个点的最 ...

  9. tyvj1161聚会的名单(trie树)

    背景 Background 明天就是candy的生日,candy又会邀请自己的一大堆好友来聚会了!哎!又要累坏飘飘乎居士了!! 描述 Description     明天就是candy的生日.晚上,c ...

随机推荐

  1. 1048: [HAOI2007]分割矩阵

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1184  Solved: 863[Submit][Status][Discuss] Descripti ...

  2. docker部署Ceph分布式存储集群

    1.环境准备 3台virtualbox虚拟机,用来安装ceph集群,已用docker-machine安装上了docker,每台虚拟机虚拟创建一个5G的硬盘,用于存储osd数据,例如:/dev/sdb ...

  3. 第2 章Python 语言基础

    必背必记 1.转义字符   Python 中的字符串还支持转义字符.所谓转义字符是指使用反斜杠“\”对一些特殊字符进行转义. \ 续行符 \n 换行符 \0 空 \t 水平制表符,用于横向跳到下一制表 ...

  4. float浮动布局(慕课网CSS笔记 + css核心技术详解第四章)

    ---------------------------------------------------------------------- CSS中的position: CSS三种布局方式: 标准流 ...

  5. linux安装vmware出现kernel-header问题

    查看日志文件, cat /tmp/vmware-xiuyuan/vmware-modconfig-9996.log | more在日志文件中有这么几行:Setting header path for ...

  6. BFS:CF356C-Compartments

    C. Compartments time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. EasyUI与Bootstrap完美结合

    注意点:版本问题.两者都是基于jQuery来构建,所以对于版本的选择要注意下

  8. CSU 1326: The contest(分组背包)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1326 题意: n个题目,每个题目都有一个价值Pi和相对能力消耗Wi,但是有些题目因为太坑不能同时做 ...

  9. python如何合并两个字典

    我有两个Python字典,如何合并它们呢?update()方法正是你所需要的. >>> x = {'a':1, 'b': 2} >>> y = {'b':10, ' ...

  10. jquery 如何实现回顶部 带滑动效果

    $("#returnTop").click(function () { var speed=200;//滑动的速度 $('body,html').animate({ scrollT ...