当前位置: 首页 > news >正文

P1143 飘飘乎居士的约会

 

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 


样例输入2 
no

备注

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

 

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

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

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int mxn=1010;
 9 int mx[5]={0,0,1,0,-1},
10     my[5]={0,1,0,-1,0};
11 int n,m;
12 int mp[mxn][mxn];
13 bool vis[mxn][mxn][2];
14 int qx[mxn*100],qy[mxn*100],flag[mxn*100],dis[mxn*100];
15 int hd=0,tl=1;
16 int mxans=300000;
17 void BFS(){
18     qx[++hd]=1;qy[hd]=1;dis[hd]=0;
19     while(hd<=tl){
20         for(int i=1;i<=4;i++){
21             int nx=qx[hd]+mx[i];
22             int ny=qy[hd]+my[i];
23             int nflag=flag[hd];
24             if(nx==n && ny==m){
25                 mxans=min(mxans,dis[hd]+1);
26                 continue;
27             }
28             if(nx>0 && nx<=n && ny>0 && ny<=m){
29                 if(!mp[nx][ny]){
30                     if(!vis[nx][ny][nflag]){
31                         vis[nx][ny][nflag]=1;
32                         qx[++tl]=nx;
33                         qy[tl]=ny;
34                         flag[tl]=nflag;
35                         dis[tl]=dis[hd]+1;
36                     }
37                 }
38                 else{
39                     if(!nflag){
40                         vis[nx][ny][1]=1;
41                         qx[++tl]=nx;
42                         qy[tl]=ny;
43                         flag[tl]=1;
44                         dis[tl]=dis[hd]+1;
45                     }
46                 }
47             }
48         }
49         hd++;
50     }
51 }
52 int main(){
53     scanf("%d%d",&n,&m);
54     int i,j;
55     char c[1020];
56     for(i=1;i<=n;i++){
57         scanf("%s",c);
58         for(j=1;j<=m;j++)
59             if(c[j-1]=='*')mp[i][j]=1;
60     }
61     BFS();
62     if(mxans==300000)printf("no\n");
63     else printf("%d\n",mxans);
64     return 0;
65 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/5789049.html

相关文章:

  • 让win7变成无线路由(需要用管理员权限打开)最后完善.rar
  • mysql 在大型应用中的架构演变
  • android 在布局中动态添加控件
  • JdbcTemplate+PageImpl实现多表分页查询
  • python os.path
  • 全国开设艺术类专业的211、985工程院校汇总
  • 优先队列的用法
  • 如何保持响应式设计新鲜感
  • 设计模式之Iterator模式
  • hbase rowkey设计的注意事项
  • SQL 必知必会
  • Javascript学习4 - 对象和数组
  • Ubuntu 14.04下安装GitLab指南
  • 黄渊普:媒体视角--O2O与传统零售
  • Makefile学习之make 的运行【转】
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【EOS】Cleos基础
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Angular 2 DI - IoC DI - 1
  • express如何解决request entity too large问题
  • extjs4学习之配置
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JAVA并发编程--1.基础概念
  • windows下使用nginx调试简介
  • yii2权限控制rbac之rule详细讲解
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 简单实现一个textarea自适应高度
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 排序(1):冒泡排序
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 小程序 setData 学问多
  • 容器镜像
  • 选择阿里云数据库HBase版十大理由
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (1)(1.11) SiK Radio v2(一)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)软件测试分工
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core使用ef 6
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • @Autowired自动装配
  • @RestControllerAdvice异常统一处理类失效原因
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BUG] Authentication Error
  • [CTF]2022美团CTF WEB WP
  • [Electron]ipcMain.on和ipcMain.handle的区别