6264  走出迷宫

描述

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

输入
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输出
输出从起点到出口最少需要走的步数。
样例输入
3 3
S#T
.#.
...
样例输出
6

 1 #include "bits/stdc++.h"
 2
 3 using namespace std ;
 4 const int maxN = 1e5 + 1e3 ;
 5 const int INF = 2147483647 ;
 6
 7 int start_x , start_y , des_x , des_y ;
 8 const int dx [ ] = { 1 , 0 , -1 , 0 } ;
 9 const int dy [ ] = { 0 , 1 , 0 , -1 } ;
10
11 char mp[ 550 ][ 550 ] ;
12 int pos_x[ maxN ] , pos_y [ maxN ] ,step[ maxN ] ;
13 void Scan ( const int n , const int m ) {
14         getchar ( ) ;
15         for ( int i=1 ; i<=n ; ++i ) {
16                 for ( int j=1 ; j<=m ; ++j ) {
17                         mp[ i ][ j ] = getchar ( ) ;
18                         if ( mp [ i ][ j ] == 'S' ) {
19                                 start_x = i ;
20                                 start_y = j ;
21                         }
22                         if( mp[ i ][ j ] == 'T' ) {
23                                 des_x = i ;
24                                 des_y = j ;
25                                 mp[ i ][ j ] = '.' ;
26                         }
27                 }
28                 getchar ( ) ;
29         }
30 }
31
32 void BFS ( const int n , const int m ) {
33         int Head = 0 , Tail = 1 ;
34         bool Get_Target = false ;
35         pos_x[ Tail ] = start_x ;
36         pos_y[ Tail ] = start_y ;
37         step[ Tail ] = 0 ;
38         mp[ start_x ][ start_y ] = '#' ;
39         while ( Head < Tail ) {
40                 ++ Head ;
41                 for ( int i=0 ; i<4 ; ++i ) {
42                         int xx = pos_x[ Head ] + dx[ i ] ;
43                         int yy = pos_y[ Head ] + dy[ i ] ;
44                         if ( xx > 0 && xx <= n && yy >= 0 && yy <= m && ( mp[ xx ][ yy ] == '.' || mp[ xx ][ yy ] == '*' ) ) {
45                                  step[ ++ Tail ] = step[ Head ] + 1 ;
46                                  mp[ xx ][ yy ] = '#' ;
47                                  pos_x [ Tail ] = xx ;
48                                  pos_y [ Tail ] = yy ;
49                                  if ( xx == des_x && yy == des_y ) {
50                                          Get_Target = true ;
51                                          printf ( "%d\n" , step[ Tail ] ) ;
52                                  }
53                         }
54                 }
55         }
56         if ( !Get_Target ) { printf ( "-1\n" ) ; }
57 }
58
59 int main ( ) {
60         int N , M ;
61         scanf ( "%d%d" , &N , &M ) ;
62         Scan ( N , M ) ;
63         BFS ( N , M );
64 }

View Code

2016-10-19 21:00:26

转载于:https://www.cnblogs.com/shadowland/p/5978710.html

NOI 题库 6264相关推荐

  1. NOI题库2.5 6264 走出迷宫

    描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路. 输入 第一行 ...

  2. NOI题库 python题解-2022.01.07整理(1.4-1.7)

    python && C++ NOI编程题解1.4 https://blog.csdn.net/yigezzchengxuyuan/article/details/86651658 ht ...

  3. NOI题库 python题解-2022.01.07整理(1.1-1.3)

    python && C++ NOI编程题解1.1 https://blog.csdn.net/yigezzchengxuyuan/article/details/86582640 ht ...

  4. NOI题库 7654 等差数列末项计算

    http://noi.openjudge.cn/math/7654/ /* NOI题库 7654 等差数列末项计算 http://noi.openjudge.cn/math/7654/ */ #inc ...

  5. python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等

    NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...

  6. OpenJudge NOI题库 1.7 编程基础之字符串

    OpenJudge NOI题库 1.7 编程基础之字符串 OpenJudge - OpenJudge - 题目 1.7_01统计数字字符个数 1.7_01统计数字字符个数_哔哩哔哩_bilibili ...

  7. OpenJudge NOI题库 1.1 编程基础之输入输出

    OpenJudge NOI题库 1.1编程基础之输入输出 OpenJudge - OpenJudge - 题目 1.1_01:Hello, World!_2017-03-19(C++语言) 1.1_0 ...

  8. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  9. OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支

    OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支 OpenJudge - OpenJudge - 题目 啊哈C语言 第11讲 4.1.4_01判断数正负 啊哈C语言 第11讲 4 ...

最新文章

  1. 【控制】《多智能体机器人系统信息融合与协调》范波老师-第6章-基于分布式强化学习的多 Agent 协调方法
  2. HashSet源码解析
  3. eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...
  4. eclipse导入远程库的git项目
  5. python的os模块使用_Python之os模块的常见用法
  6. 虚拟机上的linux作为服务器吗,linux ftp服务器 虚拟机做服务器如何实现
  7. 20年薪水的经典忠告
  8. NOI训练行动路线图
  9. 在html中写python代码的语法和特点-----基于webpy的httpserver
  10. 解决dephi使用Word时出现“没有注册接口”的情况。
  11. 服务器2003ftp站点向导,Windows 2003 ftp 配置
  12. 彩色图像与二通道的灰色图像combine
  13. ajax jsonp跨域访问,jquery ajax怎么使用jsonp跨域访问
  14. 【面试宝典】Java八股文之多线程并发面试题
  15. Fuzzy set基本介绍(1)
  16. 美团外卖红包个人CPS H5推广链接和小程序码,小程序跳转路径的获取方法
  17. 手摸手写一个互联网黑话生成器
  18. 微信公众号怎么为用户提供文件下载功能
  19. lvgl 8 中文内置字库配置
  20. 问题 C: Fraction 分数类 I

热门文章

  1. python打印对象地址_Python打印对象的全部属性
  2. cisco 模拟器安装及交换机的基本配置实验心得_网络工程师的Python之路 -- 自动监测网络配置变化...
  3. 转发表是什么鬼?怎么工作?
  4. HAUT校赛--最大奇子段和
  5. js中WINDOW对象中的location成员对象
  6. OPNET网络仿真分析-1.1.3、OPNET Modeler
  7. matlab2c使用c++实现matlab函数系列教程-acos函数
  8. python时间库date和datetime
  9. 简单小知识 记录一下 慢慢更新积累
  10. ubuntu18.04 本地源制作