搜索好题UVA1601
分析:如果以当前3个小写字母的位置为状态,则问题转化为图上的最短路问题。但是如果每次都判断小写字母的下一步是否合法,那就是说每次移动都需要判断5^3,肯定会超时。可以把所有可以移动的格子找出来建立一张图,就是把障碍物给删除,统计每个可以空格或者有鬼的格子可以移动到哪些格子,这样在判断的时候就节省了许多时间。然后bfs找最短路。注意读入的时候要多读入一个换行符,因为scanf的缓冲区用完以后,必须要读入一个字符才能才能结束读入,另外就是建图,过程,这个题的建图我给满分。
#include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "queue"
using namespace std;
const int maxn=;
int s[],t[];
int dx[]={-,,,,};
int dy[]={,,-,,};
int ind[maxn];
int g[maxn][];
int d[maxn][maxn][maxn];
bool conflict(int a,int b,int a2,int b2){
return a2==b2||(a2==b&&b2==a);
}
typedef struct
{
int a,b,c;
}Node;
int bfs()
{
queue<Node> que;
memset(d,-,sizeof(d));
Node f;
f.a=s[],f.b=s[],f.c=s[];
d[s[]][s[]][s[]]=;
que.push(f);
while(!que.empty()){
Node u=que.front(); que.pop();
int a=u.a,b=u.b,c=u.c;
if(a==t[]&&b==t[]&&c==t[]) return d[a][b][c];
for(int i=;i<ind[a];i++){
int a2=g[a][i];
for(int j=;j<ind[b];j++){
int b2=g[b][j];
if(conflict(a,b,a2,b2)) continue;
for(int k=;k<ind[c];k++){
int c2=g[c][k];
if(conflict(a,c,a2,c2)) continue;
if(conflict(b,c,b2,c2)) continue;
if(d[a2][b2][c2]!=-) continue;
Node zz;
zz.a=a2,zz.b=b2,zz.c=c2;
d[a2][b2][c2]=d[a][b][c]+;
que.push(zz);
}
}
}
}
return -;
}
int main()
{
int w,h,n;
while(scanf("%d%d%d\n",&w,&h,&n)==&&n)
{
string str[maxn];
for(int i=;i<h;i++)
getline(cin,str[i]);
int cnt=;
int x[maxn],y[maxn],id[maxn][maxn];
for(int i=;i<h;i++){ //建图
for(int j=;j<w;j++){
if(str[i][j]!='#'){
x[cnt]=i,y[cnt]=j,id[i][j]=cnt;
if(islower(str[i][j])) s[str[i][j]-'a']=cnt;
else if(isupper(str[i][j])) t[str[i][j]-'A']=cnt;
++cnt;
}
}
}
for(int i=;i<cnt;i++){
ind[i]=;
for(int dir=;dir<;dir++){
int nx=x[i]+dx[dir],ny=y[i]+dy[dir];
if(str[nx][ny]!='#')
g[i][ind[i]++]=id[nx][ny];
}
}
if(n<=){
ind[cnt]=;g[cnt][]=cnt; s[]=t[]=cnt++;
}
if(n<=){
ind[cnt]=;g[cnt][]=cnt; s[]=t[]=cnt++;
}
printf("%d\n",bfs()); }
}
搜索好题UVA1601的更多相关文章
- 搜索 水题&&错误集锦
引子: 本以为搜索的题目老师也不会检查,结果今天早上loli慢悠悠的说:“请同学们提交一下搜索的题目~”,顿时心旌摇曳,却也只能装作镇定自若的样子,点了点头.. 然后就开始了今天的疯狂做题,虽说题目都 ...
- poj1088(记忆化搜索入门题)
题目链接:http://poj.org/problem?id=1088 思路: 明显的记忆化搜索题,用dp[i][j]表示从(i,j)出发能滑的最远距离,用dfs搜索,若dp[x][y]>0即已 ...
- 【搜索好题】bzoj1501 [NOI2005]智慧珠游戏
bzoj1501 [NOI2005]智慧珠游戏 搜索苟逼题系列. 暴力枚举每一种情况(包括旋转翻转全都考虑在内)然后码出代码. (正解似乎不是这样子的) 那年好像还有平衡树苟逼题维护数列233333心 ...
- hdu 1181:变形课(搜索水题)
变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submis ...
- 【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)
点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即 ...
- 搜索水题四连发_C++
特别声明:以下题目有部分为原创题,涉及版权问题,不得转载,违者追究 法律责任! 话说这是一套神题,只有你想不到,没有你做不到 题目更正后比 Pascal 跑得还快哈~ 一道特别裸,但是特别坑的搜索题 ...
- 搜索刷题记录by cellur925
我好菜啊!连暴搜都不会! 注意边界退出! 特开此帖,记录搜索学习之路!(逃) 1.全排列 2.八皇后 3.数的划分 由于此题有同一划分方法算一个的限制,我们为了避免搜多,可以使搜出的结果满足单调不降性 ...
- hdu3786 Floyd或搜索 水题
题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- UVA10118(记忆化搜索 + 好题)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19440 题意,4堆不同颜色的糖果,每堆N个,从堆上往下拿,放入一个最大装5个 ...
随机推荐
- 洛谷——P3576 [POI2014]MRO-Ant colony
P3576 [POI2014]MRO-Ant colony 题目描述 The ants are scavenging an abandoned ant hill in search of food. ...
- log4j配置(转载)
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- Annotation基本概念,作用以及举例说明。
Annotation即注解,是Jav5新特征,Annotatio提供一些本来不属于程序的数据,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联.为程序的元素(类. ...
- Maven用项目模板生成项目
Archetype插件是Maven生成项目的项目模板,项目模板就是一个框,把文件夹这些定好,然后就可以在上开写具体逻辑等等. 最常用的命令: mvn archetype:generate 这个是生成一 ...
- CentOS 5.4 final下Systemtap的安装
CentOS 5.4 final下Systemtap的安装 时间:2015-02-11来源:linux网站 作者:zklth 一.Systemtap运行环境需求 (1)linux kernel ...
- 使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
通过Myeclipse + SVN插件 + TaoCOde可以省去代码仓库的租建:同时还可以很好的满足小团队之间敏捷开发的需求.接下来详细介绍整个搭建流程. 首先,介绍所用到的工具: 1,Myecli ...
- 基于MNIST数据的卷积神经网络CNN
基于tensorflow使用CNN识别MNIST 参数数量:第一个卷积层5x5x1x32=800个参数,第二个卷积层5x5x32x64=51200个参数,第三个全连接层7x7x64x1024=3211 ...
- 杭电1863 畅通project
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- weex 项目 创建 远程 icon
一.创建 远程 icon 步骤一:打开 阿里巴巴矢量图标库 官网:http://www.iconfont.cn/ 步骤二:选择项目需要的 icon 步骤三:添加到项目(没有项目会自动创建) 步骤四: ...
- appium部分api
转自:http://www.aichengxu.com/view/41510 使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建 ...