NOIP模拟赛 密室逃脱
密室逃脱(maze.*)
即使czhou没有派出最强篮球阵容,机房篮球队还是暴虐了校篮球队。为了不打击校篮球队信心,czhou决定改变训练后的活动。近来,江大掌门的徒弟徒孙们纷纷事业有成,回到母校为机房捐钱捐物。财大气粗的机房组收回了五层六层的所有教室。Czhou决定将六层的教室改造为智能密室逃脱活动室。
每天傍晚,神牛们可以依次逐个进入游玩。我们简单的将教室分割为n*n个房间,K是你初始所在房间,T是你最终逃脱的房间。如果你想要逃脱房间,你必须依次找到m把钥匙。我们假定你从一个房间进入另一个房间需要花费1的时间。当然某些房间有些特殊的问题(地图上S表示)需要回答才能通过,对于机智的众牛们来说,这些问题根本不是问题。我们假定众牛们花费1的时间解决问题。(主要是出题的人表述不清,导致众牛理解困难;当然问题只需要回答一次,下次再次进入房间不需要回答了)
Input:maze.in
第一行两个数字n,m
接下来n*n描述地图
Output: maze.out
需要最少时间逃脱密室。若无解输出impossible
Sample1.in:
3 1
K.S
##1
1#T
Sample1.out
5
Sample2.in
3 1
K#T
.S#
1#.
Sample2.out
Impossible
Sample3.in
3 2
K#T
.S.
21.
Sample3.out
8
样例3说明:
要先取钥匙1,再取钥匙2。地图上可能有多个同一种钥匙,#为墙壁即不可走.
数据范围:
0 < N <= 100, 0<=M<=9
暴力dfs+bfs
dfs枚举走几个问题,bfs求最短路
#include<iostream>
#include<queue>
#include<cstring>
using namespace std; const int INF=0x7fffffff; struct NODE
{
int x,y,t;
}; int n,m;
char A[][];
int kx,ky,tx,ty,cnt,ans=INF;
int x[],y[];
int F[][][];
int xx[]={,,,-},yy[]={,-,,}; void bfs()
{
memset(F,-,sizeof(F));
queue<NODE> Q;
Q.push((NODE){kx,ky,});
F[kx][ky][]=;
while(!Q.empty())
{
NODE q=Q.front();Q.pop();
for(int i=;i<;i++)
{
int x=q.x+xx[i],y=q.y+yy[i],t=q.t;
if(x<||x>n||y<||y>n) continue;
if(A[x][y]=='#'||F[x][y][t]!=-) continue;
if(t+==A[x][y]-'') t++;
F[x][y][t]=F[q.x][q.y][q.t]+;
Q.push((NODE){x,y,t});
}
}
} void dfs(int now,int k)
{
if(now==cnt+)
{
bfs();
if(F[tx][ty][m]!=-)
ans=min(ans,k+F[tx][ty][m]);
return;
}
A[x[now]][y[now]]='.';
dfs(now+,k+);
A[x[now]][y[now]]='#';
dfs(now+,k);
} int main()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
scanf("%s",A[i]+);
for(int j=;j<=n;j++)
{
switch(A[i][j])
{
case 'K':
kx=i;ky=j;
break;
case 'T':
tx=i;ty=j;
break;
case 'S':
cnt++;
x[cnt]=i;y[cnt]=j;
break;
}
}
}
dfs(,);
if(ans==INF)
cout<<"Impossible"<<endl;
else
cout<<ans<<endl;
return ;
}
NOIP模拟赛 密室逃脱的更多相关文章
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- hyperledger fabric 1.0.5 分布式部署 (九)
linux 使用vim.ctags 配置fabric 源码阅读环境 首先需要安装 ctags,作者使用apt-get 来安装的,安装的版本是5.9 apt-get install ctags 5.9 ...
- 关于setTimeout(fn,0)
JS是单线程引擎:它把任务放到队列中,不会同步去执行,必须在完成一个任务后才开始另外一个任务. 浏览器的内核是多线程的,它们在内核制控下相互配合以保持同步,一个浏览器至少实现三个常驻线程:javasc ...
- 在线获取键盘按键值(ascii码)工具
在线获取键盘按键值(ascii码)工具 http://www.bejson.com/othertools/keycodes/ 可以根据输入的值获取对应的键盘ascii码值
- Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D
Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...
- HDU 2243 考研路茫茫——单词情结 求长度小于等于L的通路总数的方法
http://acm.hdu.edu.cn/showproblem.php?pid=2243 这是一题AC自动机 + 矩阵快速幂的题目, 首先知道总答案应该是26^1 + 26^2 + 26^3 .. ...
- (转)COBBLER无人值守安装
COBBLER无人值守安装 说在最前面的话 在看Cobbler之前请大家先看一下Kickstart无人值守安装,了解一下Cobbler的实现原理.但是Cobbler是独立的,不需要先安装Kicksta ...
- Typora--Draw Diagrams With Markdown
Typora Typora supports some Markdown extension for diagrams, you could enable this feature from pref ...
- npoi导出excel合并单元格
需要引用NPOI.dll程序集和Ionic.Zip.dll程序集 string[] headerRowName = { "序号", "地市", "镇街 ...
- Hi,bro
这是我第一次写部落格,也是我刚开始学python,希望我以后能把To Do List 做好,也希望大家可以好好学习,为了以后good life去努力,Do SomeThing OK?
- columns分栏与flex弹性盒模型
columns 分栏 值:column-width:设置每列的宽度 column-count:设置列数 例:columns{200px 3} 列数和宽度固定 co ...