题目链接: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. cdrecord光盘烧录工具

    我们是透过 cdrecord 这个命令来进行文字介面的烧录行为,这个命令常见的选项有底下数个: [root@www ~]# cdrecord -scanbus dev=ATA <==查询烧录机位 ...

  2. CF360B Levko and Array (二分查找+DP)

    链接:CF360B 题目: B. Levko and Array time limit per test 2 seconds memory limit per test 256 megabytes i ...

  3. 漫长Appium之路(一)——从黑苹果到虚拟机

    作为一名普普通通的实习生,我也开始习惯折腾一般的生活了.部门应该最近是要搞个iOS自动化测试工具,我从最开始说起吧. 应该是上上上周五.主管找到我,说要装一个黑苹果,要我尽快把黑苹果能支持的硬件配置给 ...

  4. userdate和table类型的效率对比

    做cocos2d-x开发的人可能有不少人在实现类时会利用cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现: --Create an clas ...

  5. TCPIP,Http,Socket的区别

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  6. bwa的使用方法

    bwa的使用需要两中输入文件:    Reference genome data(fasta格式 .fa, .fasta, .fna)    Short reads data (fastaq格式 .f ...

  7. sharepoint部件webparth关闭找回的方法

  8. 解决虚拟机 正在决定eht0 的ip信息失败 无链接-- 虚拟机上linux redhat 上网问题

    对于虚拟机上,linux redhat上网的配置方式有三种 一.用setup命令进行配置(具体技巧可查setup命令的使用) 二.直接用 ifconfig eth0  ip地址进行配置 三.进入系统文 ...

  9. Java for LeetCode 190 Reverse Bits

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  10. Greedy:Fence Repair(POJ 3252)

    Fence Repair 问题大意:农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候 ...