题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26772

思路:注意判重就行,开个6维数组记录3个robots的位置,然后要注意的就是不能多个robots同时在一个格子上,一开始没注意到这点!

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 11 struct Point{
int x,y;
}; struct Node{
Point p[];
int step;
}st; char map[MAXN][MAXN];
bool mark[MAXN][MAXN][MAXN][MAXN][MAXN][MAXN];
int n,dir[][]={{-,},{,},{,-},{,}}; void bfs()
{
memset(mark,false,sizeof(mark));
queue<Node>que;
st.step=;
que.push(st);
mark[st.p[].x][st.p[].y][st.p[].x][st.p[].y][st.p[].x][st.p[].y]=true;
while(!que.empty()){
Node q,pp=que.front();
que.pop();
if(map[pp.p[].x][pp.p[].y]=='X'&&map[pp.p[].x][pp.p[].y]=='X'&&map[pp.p[].x][pp.p[].y]=='X'){
printf("%d\n",pp.step);
return ;
}
for(int i=;i<;i++){
for(int j=;j<=;j++){
q.p[j].x=pp.p[j].x+dir[i][],q.p[j].y=pp.p[j].y+dir[i][];
if(q.p[j].x<||q.p[j].x>=n||q.p[j].y<||q.p[j].y>=n){
q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;
}else if(map[q.p[j].x][q.p[j].y]=='#'){
q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;
}
}
//robots不能在同一个格子上
for(int l=;l<=;l++){
for(int j=;j<=;j++){
for(int k=;k<=;k++)if(j!=k){
if(q.p[j].x==q.p[k].x&&q.p[j].y==q.p[k].y)q.p[j].x=pp.p[j].x,q.p[j].y=pp.p[j].y;
}
}
}
if(!mark[q.p[].x][q.p[].y][q.p[].x][q.p[].y][q.p[].x][q.p[].y]){
mark[q.p[].x][q.p[].y][q.p[].x][q.p[].y][q.p[].x][q.p[].y]=true;
q.step=pp.step+;
que.push(q);
}
}
}
puts("trapped");
} int main()
{
int _case,num,t=;
scanf("%d",&_case);
while(_case--){
scanf("%d",&n);
num=;
for(int i=;i<n;i++){
scanf("%s",map[i]);
for(int j=;j<n;j++){
if(map[i][j]=='A'||map[i][j]=='B'||map[i][j]=='C'){
st.p[num].x=i,st.p[num].y=j;
num++;
}
}
}
printf("Case %d: ",t++);
bfs();
}
return ;
}

loj 1055(bfs)的更多相关文章

  1. loj 1377 (bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1377 思路:这道题只要处理好遇到"*"这种情况就可以搞定了.我们可 ...

  2. loj 1185(bfs)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26898 思路:我们可以给定有直接边相连的两点的距离为1,那么就是求 ...

  3. loj 1165(bfs+康托展开)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26879 思路:题目意思很简单,就是通过一些位置的交换,最后变成有序 ...

  4. loj 1426(dfs + bfs)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1426 思路:首先我们预处理出每一个"*"在某一方向上最终能到达的位 ...

  5. loj 1046(bfs)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26766 思路:由于数据不是很大,我们可以枚举骑士最后聚集的位置,然 ...

  6. LOJ 3057 「HNOI2019」校园旅行——BFS+图等价转化

    题目:https://loj.ac/problem/3057 想令 b[ i ][ j ] 表示两点是否可行,从可行的点对扩展.但不知道顺序,所以写了卡时间做数次 m2 迭代的算法,就是每次遍历所有不 ...

  7. 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS

    题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...

  8. LOJ #2877. 「JOISC 2014 Day2」交朋友 并查集+BFS

    这种图论问题都挺考验小思维的. 首先,我们把从 $x$ 连出去两条边的都合并了. 然后再去合并从 $x$ 连出去一条原有边与一条新边的情况. 第一种情况直接枚举就行,第二种情况来一个多源 bfs 即可 ...

  9. LOJ #2876. 「JOISC 2014 Day2」水壶 BFS+最小生成树+倍增LCA

    非常好的一道图论问题. 显然,我们要求城市间的最小生成树,然后查询路径最大值. 然后我们有一个非常神的处理方法:进行多源 BFS,处理出每一个城市的管辖范围. 显然,如果两个城市的管辖范围没有交集的话 ...

随机推荐

  1. TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

    /** * * @author ocq */ class Parent implements Comparable { private int age = 0; public Parent(int a ...

  2. 项目中用到的window.showModalDialog(来自网络)

    window.showModalDialog相关: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showMo ...

  3. linux 下如何给用户添加权限

    linux 添加用户.权限:# useradd –d /usr/sam -m sam此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户 ...

  4. ftp的20 21端口和主动被动模式

    ftp只支持tcp连接,不支持udp连接. ftp使用两个端口: 21(控制端口, 命令端口) , 20(数据端口) 21端口:  用来控制用户验证, 连接的建立和关闭:open/close/bye ...

  5. poj1279.Inlay Cutters(模拟 + 枚举)

    Inlay Cutters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2367   Accepted: 995 Desc ...

  6. [Educational Codeforces Round 16]C. Magic Odd Square

    [Educational Codeforces Round 16]C. Magic Odd Square 试题描述 Find an n × n matrix with different number ...

  7. java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...

  8. DICOM:Ubuntu14环境下安装dcm4chee+oviyam2.1

    背景: 之前博文DICOM:开源DICOM服务框架DCM4CHEE安装中曾介绍过在Windows7环境下安装部署dcm4chee.近期公司项目需要与部署到Linux系统的远端基于dcm4chee框架的 ...

  9. Java入门学习知识点汇总

    Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写 ...

  10. July 27th, Week 31st Wednesday, 2016

    Don't let yesterday take up too much of today. 别让昨天的事情占据今天太多时间. Learn from yesterday, but don't let ...