题目

分析:如果以当前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的更多相关文章

  1. 搜索 水题&&错误集锦

    引子: 本以为搜索的题目老师也不会检查,结果今天早上loli慢悠悠的说:“请同学们提交一下搜索的题目~”,顿时心旌摇曳,却也只能装作镇定自若的样子,点了点头.. 然后就开始了今天的疯狂做题,虽说题目都 ...

  2. poj1088(记忆化搜索入门题)

    题目链接:http://poj.org/problem?id=1088 思路: 明显的记忆化搜索题,用dp[i][j]表示从(i,j)出发能滑的最远距离,用dfs搜索,若dp[x][y]>0即已 ...

  3. 【搜索好题】bzoj1501 [NOI2005]智慧珠游戏

    bzoj1501 [NOI2005]智慧珠游戏 搜索苟逼题系列. 暴力枚举每一种情况(包括旋转翻转全都考虑在内)然后码出代码. (正解似乎不是这样子的) 那年好像还有平衡树苟逼题维护数列233333心 ...

  4. hdu 1181:变形课(搜索水题)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  5. 【LOJ6043】「雅礼集训 2017 Day7」蛐蛐国的修墙方案(搜索技巧题)

    点此看题面 大致题意: 给你一个长度为\(n\)的排列\(p\),要求构造一个合法的括号序列,使得如果第\(i\)个位置是左括号,则第\(p_i\)个位置一定是右括号. 暴搜 很容易想出一个暴搜. 即 ...

  6. 搜索水题四连发_C++

    特别声明:以下题目有部分为原创题,涉及版权问题,不得转载,违者追究 法律责任! 话说这是一套神题,只有你想不到,没有你做不到 题目更正后比 Pascal 跑得还快哈~ 一道特别裸,但是特别坑的搜索题 ...

  7. 搜索刷题记录by cellur925

    我好菜啊!连暴搜都不会! 注意边界退出! 特开此帖,记录搜索学习之路!(逃) 1.全排列 2.八皇后 3.数的划分 由于此题有同一划分方法算一个的限制,我们为了避免搜多,可以使搜出的结果满足单调不降性 ...

  8. hdu3786 Floyd或搜索 水题

    题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. UVA10118(记忆化搜索 + 好题)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19440 题意,4堆不同颜色的糖果,每堆N个,从堆上往下拿,放入一个最大装5个 ...

随机推荐

  1. luogu P3865 【模板】ST表

    题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 NN 的数列,和 MM 次询 ...

  2. html页面中拍照和上传照片那些事儿(二)

    本文为原创,转载请注明出处: cnzt       文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6895352.html 本文主要说下iOS上传的照片在安卓机 ...

  3. Obj-C, library with ARC code and warning - Method possibly missing a [super dealloc] call?

    1 down vote favorite I'm adding the MKStoreKit to my app and I'm getting a warning, Method possibly ...

  4. nginx配置初步

    nginx配置初步 1,切换至nginx目录,找到配置文件目录 cd /etc/nginx/conf.d 2,拷贝一份conf文件 sudo cp default.conf head.conf 3,进 ...

  5. 转:给 Android 开发者的 RxJava 详解

    转自:  http://gank.io/post/560e15be2dca930e00da1083 评注:多图解析,但是我还是未看懂. 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入 ...

  6. 30 分钟编写一个 Flask 应用

    Flask 是一种很赞的Python web框架.它极小,简单,最棒的是它很容易学. 今天我来带你搭建你的第一个Flask web应用!和官方教程 一样,你将搭建你自己的微博客系统:Flaskr.和官 ...

  7. Unicode解码转换为中文

    Unicode转中文2:Regex.Unescape(string str);str格式:"\uxxxx" ,举例:"\u300d"

  8. DW格式与布局

  9. ScrollView白边问题

    在Android开发所使用的ScrollView中..兼容比較低的版本号的时候(比方14)会出现难看的白边.这时假设使用的是xml布局文件话设置ScrollView的android:fadingEdg ...

  10. CSDN-markdown编辑器之从线上导入Markdown文件

      CSDN-markdown编辑器支持从线上导入Markdown文件的功能,假设你用其他支持Markdown的编辑器在网上写了博客文章或说明档,想公布到CSDN博客中,就能够使用本功能非常方便的完毕 ...