链接:https://ac.nowcoder.com/acm/contest/330/C
来源:牛客网

题目描述

精通程序设计的 Applese 双写了一个游戏。

在这个游戏中,它被困在了一个 n×mn×m 的迷宫中,它想要逃出这个迷宫。

在迷宫中,有一些方格是水池,只有当 Applese 处于水属性的时候才可以通过;有一些方格是岩浆,只有当 Applese 是火属性的时候可以通过;有一些方格是墙壁,无论如何都无法通过;另一些格子是空地(包括起点和终点),可以自由通过。

在一些空地上有神秘道具可以让 Applese 转换自己的属性(从水属性变为火属性或从火属性变为水属性,需要一个单位的时间)。

已知 Applese 在一个单位的时间内可以朝四个方向行走一格,且开始处于水属性,位于空地的道具拾取后只能在该处立即使用(或者不使用),且可以多次使用。求它走出迷宫需要的最少时间。

输入描述:

第一行两个正整数 n, m 表示迷宫的大小。
接下来 n 行,每行长度为 m 的字符串。描述地图。
其中 'S' 表示起点,'T' 表示终点,'.' 表示空地,'w'表示岩浆,'~'表示水池,'@' 表示道具,'#'表示障碍。
保证地图中的起点和终点只有一个,道具都位于空地。

输出描述:

输出一个整数,表示 Applese 走出迷宫的最短时间。特别地,如果 Applese 走不出迷宫,输出 "-1"。
示例1

输入

5 5
.w@..
.S#..
~w#..
.w..~
@w.~T

输出

18

备注:

1≤n,m≤100
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int d[][]={{,},{,},{,-},{-,}};//右 上 左 下
int n,m;
char a[][];
bool vis[][][];
int ans; struct node
{
int x;
int y;
int sta;//属性,水属性为0,火属性为1
int time;
};
node s;//起点
int ex,ey;
queue<node>que; void bfs()
{
while(!que.empty()) que.pop();
s.sta=;s.time=;//初始状态和初始时间
que.push(s);
vis[s.x][s.y][s.sta]=true;
while(!que.empty())
{
node now=que.front();
que.pop();
if(now.x==ex && now.y==ey)
{
ans=now.time;
return;
}
for(int i=;i<;i++)///不改变状态走
{
int tx=now.x+d[i][];
int ty=now.y+d[i][];
if( tx>= && tx<n && ty>= && ty<m && a[tx][ty]!='#' && !vis[tx][ty][now.sta])
{///下一步没越界 并且不是障碍 并且没被走过
if( (a[tx][ty]=='w' && now.sta==) || (a[tx][ty]=='~' && now.sta==) )
continue;///属性相异,不能走,看其他方向
else
{
vis[tx][ty][now.sta]=true;
que.push( node{tx,ty,now.sta,now.time+} );
}
}
}
if(a[now.x][now.y]=='@' && !vis[now.x][now.y][now.sta^])
{///遇到道具 并且 并且之前没有以另一种状态走到这里,改变状态
vis[now.x][now.y][now.sta^]=true;
que.push( node{now.x,now.y,now.sta^,now.time+} );
}
}
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)
scanf("%s",a[i]);
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(a[i][j]=='S')
{s.x=i;s.y=j;}
if(a[i][j]=='T')
{ex=i;ey=j;}
}
}
memset(vis,false,sizeof(vis));
ans=-;
bfs();
printf("%d\n",ans); }
return ;
}
 

Applese走迷宫-bfs的更多相关文章

  1. 牛客寒假算法基础集训营4 C Applese 走迷宫

    链接:https://ac.nowcoder.com/acm/contest/330/C来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m迷宫 在迷宫 ...

  2. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. hdu_1728_逃离迷宫(bfs)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...

  4. 一本通之 一堆迷宫 (Dungeon Master&走出迷宫&走迷宫)

    一本通在线崩溃....... . 有图有真相 这是个三维迷宫,其实和二位迷宫差不多,只是方向多加了2个. 但这个题的输入十分恶心,一度被坑的用cin.ignore(),但还是不过... 它的正确输入方 ...

  5. zzuli 1726 迷宫 BFS(题意)

    1726: 迷宫 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 502  Solved: 80 SubmitStatusWeb Board Descri ...

  6. 【BZOJ2707】[SDOI2012]走迷宫 Tarjan+拓扑排序+高斯消元+期望

    [BZOJ2707][SDOI2012]走迷宫 Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,M ...

  7. Java基于OpenCV实现走迷宫(图片+路线展示)

    Java基于OpenCV实现走迷宫(图片+路线展示) 由于疫情,待在家中,太过无聊.同学发了我张迷宫图片,让我走迷宫来缓解暴躁,于是乎就码了一个程序出来.特此记录. 原图: 这张图,由于不是非常清晰, ...

  8. 百炼3752:走迷宫--栈实现dfs

    3752:走迷宫 总时间限制:  1000ms 内存限制:  65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...

  9. 第四周PTA笔记 好吃的巧克力+特殊的翻译+下次一定(续)+走迷宫

    好吃的巧克力 超市正在特价售卖巧克力,正好被贪吃的Lucky_dog看见了. 巧克力从左到右排成一排,一共有N个,M种. 超市有一个很奇怪的规定,就是你在购买巧克力时必须提供两个数字a和b,代表你要购 ...

随机推荐

  1. 动手动脑-java重载

    有以下例子: 例: Using overloaded methods public class MethodOverload { public static void main(String[] ar ...

  2. day24类的继承

    类的继承1 什么是继承    继承一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类\基类\超类    python中继承的特点:        1. 子类可以遗传/重用父类的属性   ...

  3. IntelliJ Idea设置Could not autowire. No beans of 'xxx' type found

    1.问题描述 在Idea的spring工程里,经常会遇到Could not autowire. No beans of ‘xxxx’ type found的错误提示.但程序的编译和运行都是没有问题的, ...

  4. JAVA操作字符串

    package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* ...

  5. Linux设置DNS server

    查看: cat /etc/resolv.conf 修改: vim /etc/resolv.conf

  6. jdk src 学习 Threadlocal

    示例: import java.io.Serializable; public class TestThreadLocal implements Serializable { /** * */ pri ...

  7. nodeJs 资料

    http://blog.csdn.net/binyao02123202/article/details/18811207 非常详细 http://www.runoob.com/nodejs/nodej ...

  8. jmap dump文件压缩后失效

    最近线上出问题,于是用jmap -dump拿到dump文件,再linux压缩后拿到windows下无效,后来又直接拿了一个没有压缩的竟然可以用...坑啊!~

  9. <记录> PHP Redis操作类

    namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...

  10. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

    转自:https://www.zhihu.com/question/20948649?sort=created 我最近也遇到这个问题了,用传统的快捷方式加参数并没有用,不知道是不是和chrome版本有 ...