题目链接:传送门

题目大意:从起点到终点需要最少多少步(必须要关掉所有开关才能出去)

题目思路:用一个3维数组   dp[x][y][t]表示到达当前位置x,y,已经关掉了t个开关走的最少步数,然后就是bfs搜索

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 1000010
#define maxn 400005
typedef pair<int,int> PII; int n,m,sx,sy;
char pic[][];
int dp[][][]; ///记录在关掉t个开关的情况下走到当前位置用得最少步数
int dir[][]={{,},{-,},{,},{,-}};
struct Node{
int x,y,t,v; ///v记录步数,t记录关掉的开关数目
int vi[]; ///判断当前状态哪些开关已经关掉了
void ini(){mst(vi,);v=t=;}
}node,temp;
void bfs(){
mst(dp,inf);
dp[node.x][node.y][]=;
queue<Node>q;q.push(node);
while(!q.empty()){
node=q.front();q.pop();
if(pic[node.x][node.y]=='E'){
if(node.t==){
dp[node.x][node.y][]=min(dp[node.x][node.y][],node.v);
}
continue;
}
for(int i=;i<;++i){
int xx=node.x+dir[i][];
int yy=node.y+dir[i][];
if(xx<||yy<||xx>n||yy>m||pic[xx][yy]=='#')continue;
temp=node;temp.x=xx;temp.y=yy;
temp.v++;
if(pic[xx][yy]=='A'&&!temp.vi[]){
temp.vi[]=;
temp.t++;
}
else if(pic[xx][yy]=='B'&&!temp.vi[]){
temp.vi[]=;
temp.t++;
}
else if(pic[xx][yy]=='C'&&!temp.vi[]){
temp.vi[]=;
temp.t++;
}
if(dp[xx][yy][node.t]>temp.v){
dp[xx][yy][node.t]=temp.v;
q.push(temp);
}
}
}
if(dp[sx][sy][]<inf)
printf("%d\n",dp[sx][sy][]);
else printf("-1\n");
}
int main(){
int i,j,group,Case=;
scanf("%d",&group);
while(group--){
node.ini();
scanf("%d%d",&n,&m);
for(i=;i<=n;++i){
scanf("%s",pic[i]+);
for(j=;j<=m;++j){
if(pic[i][j]=='S'){node.x=i;node.y=j;}
else if(pic[i][j]=='E'){sx=i;sy=j;}
}
}
bfs();
}
return ;
}

dlut1188(wanghang的迷宫)的更多相关文章

  1. NEU710(wanghang走迷宫)

    题目链接:传送门 题目大意:给你一个图,要从起点走到终点并且要吃够足够的金币才能出去,图上有金币(只能吃一次), 有传送门(用一次消耗1金币,必须有金币才能使用),问最少需要多少步才能出去.不能出去输 ...

  2. C语言动态走迷宫

    曾经用C语言做过的动态走迷宫程序,先分享代码如下: 代码如下: //头文件 #include<stdio.h> #include<windows.h>//Sleep(500)函 ...

  3. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  4. BFS_Maze_求解迷宫最短路径

    /* 10 10 #.######.# ......#..# .#.##.##.# .#........ ##.##.#### ....#....# .#######.# ....#..... .## ...

  5. 【刷题笔记】I'm stuck! (迷宫)-----java方案

    题目描述 : 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S', 'T'七个字符中的一个,分别表示如下意思: '#': 任何时候玩家都不能移动到此 ...

  6. canvas实例 ---- 制作简易迷宫(一)

    这个系列分为两部分,第一部分为迷宫的生成及操作,第二部分为自动寻路算法. 我们先看效果: See the Pen QGKBjm by fanyipin (@fanyipin) on CodePen. ...

  7. HTML 迷宫

    今天补个遗,将很久以前研究 HTML5 的时候写的生成迷宫.迷宫寻路程序整理出来. 下载链接在文章最后. 简介 为什么要做这个 HTML5 迷宫程序?因为我喜欢.我愿意.也是向老程序员学习(见第5节) ...

  8. 洛谷P1605 迷宫——S.B.S.

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  9. Java迷宫游戏

    缘起: 去年(大三上学期)比较喜欢写小游戏,于是想试着写个迷宫试一下. 程序效果: 按下空格显示路径: 思考过程: 迷宫由一个一个格子组成,要求从入口到出口只有一条路径. 想了一下各种数据结构,似乎树 ...

随机推荐

  1. Strace--系统调用分析问题集锦

    ---------------------------------------------------------------------------------------------------- ...

  2. docker运行环境安装-centos(一)

    在这里我们使用的是docker的社区版Docker CE,针对的是未安装docker的新的主机,如果安装过docker的早期版本,先卸载它们及关联的依赖资源,安装的版本为docker 18.03. 1 ...

  3. js限制文本框只能输入数字方法

    输入大于0的正整数 <input onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,' ...

  4. SVN服务器更改ip地址客户端怎么设置(转载)

    SVN 服务器 IP 地址修改后,客户端对服务器的连接可以采用以下的方法重定位: 1. 如果客户端工具是TortoiseSVN,直接在工作副本上右键,选择TortoiseSVN->relocat ...

  5. atitit.jndi的架构与原理以及资源配置and单元测试实践

    atitit.jndi的架构与原理以及资源配置and单元测试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin  <database> ...

  6. 基于Verilog语言的FIR滤波【程序和理解】

    一直想找一个简单.清晰.明了的fir滤波器的设计,终于找到了一个可以应用的,和大家分享一下,有助于FPGA新手入门. 1.说道fir滤波器,滤波系数肯定是最重要的,因为后面程序中涉及到滤波系数问题,所 ...

  7. python学习之endswith()

    定义: Python endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False.可选参数"start"与"end&q ...

  8. nodejs之express的使用

    Express是目前最流行的基于Node.js的Web开发框架,可以快速的搭建一个完整功能的网站. Express框架建立在内置的http模块上,http模块生成服务器的原始代码如下. var htt ...

  9. The Ball Puzzle

    自己做的小游戏 google play store: https://play.google.com/store/apps/details?id=com.ffipp.theBall app store ...

  10. Reducing the Dimensionality of Data with Neural Networks

    ****************内容加密中********************