链接:http://www.lightoj.com/volume_showproblem.php?problem=1055

类似推箱子的游戏,一条命令可以让abc三个小人同时移动,但是出界或者撞墙是不移动的,求abc到达终点x所需要的最小步数。

我这里用六维的vis来标记这个点走过没,直接上代码

#include<bits/stdc++.h>
using namespace std;
int n;
char mp[][];
bool vis[][][][][][];
struct node
{
int ax, ay, bx, by, cx, cy, step;
};
node s;
int bfs()
{
int nx[][] = {, , , , , -, -, };
queue<node>Q;
s.step = ;
Q.push(s);
while(!Q.empty())
{
s = Q.front();
Q.pop();
if(mp[s.ax][s.ay]=='X'&&mp[s.bx][s.by]=='X'&&mp[s.cx][s.cy]=='X') return s.step;
for(int i = ; i < ; i++)
{
node t;
t.ax = s.ax + nx[i][], t.bx = s.bx + nx[i][], t.cx = s.cx + nx[i][];
t.ay = s.ay + nx[i][], t.by = s.by + nx[i][], t.cy = s.cy + nx[i][];
if(t.ax<||t.ax>=n) t.ax = s.ax;
if(t.ay<||t.ay>=n) t.ay = s.ay;
if(t.bx<||t.bx>=n) t.bx = s.bx;
if(t.by<||t.by>=n) t.by = s.by;
if(t.cx<||t.cx>=n) t.cx = s.cx;
if(t.cy<||t.cy>=n) t.cy = s.cy;
for(int j = ; j <= ; j++) //这里循环3是因为不能让3个小人重合,若循环1次因为走位的次序不同可能还会重合
{
if(mp[t.ax][t.ay]=='#'||(t.ax==t.bx&&t.ay==t.by)||(t.ax==t.cx&&t.ay==t.cy)) t.ax=s.ax, t.ay=s.ay;
if(mp[t.bx][t.by]=='#'||(t.bx==t.ax&&t.by==t.ay)||(t.bx==t.cx&&t.by==t.cy)) t.bx=s.bx, t.by=s.by;
if(mp[t.cx][t.cy]=='#'||(t.cx==t.bx&&t.cy==t.by)||(t.cx==t.ax&&t.cy==t.ay)) t.cx=s.cx, t.cy=s.cy;
}
if(vis[t.ax][t.ay][t.bx][t.by][t.cx][t.cy]) continue;
vis[t.ax][t.ay][t.bx][t.by][t.cx][t.cy] = ;
t.step = s.step+;
Q.push(t);
}
}
return -;
}
int main()
{
int cas = , t;
cin>>t;
while(t--)
{
scanf("%d", &n);
memset(vis, , sizeof vis);
for(int i = ; i < n; i++)
scanf("%s", mp[i]);
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
{
if(mp[i][j] == 'A')
s.ax = i, s.ay = j;
if(mp[i][j] == 'B')
s.bx = i, s.by = j;
if(mp[i][j] == 'C')
s.cx = i, s.cy = j;
}
vis[s.ax][s.ay][s.bx][s.by][s.cx][s.cy] = ;
printf("Case %d: ", ++cas);
int ans = bfs();
if(ans==-) puts("trapped");
else printf("%d\n", ans);
}
return ;
}

【lightoj-1055】Going Together(BFS)的更多相关文章

  1. 【LightOJ - 1205】Palindromic Numbers

    [链接]https://cn.vjudge.net/problem/LightOJ-1205 [题意] 求出L..R范围内的回文个数 [题解] 数位DP; 先求出1..x里面的回文串个数.则做一下前缀 ...

  2. 【BZOJ 3049】【USACO2013 Jan】Island Travels BFS+状压DP

    这是今天下午的互测题,只得了60多分 分析一下错因: $dis[i][j]$只记录了相邻的两个岛屿之间的距离,我一开始以为可以,后来$charge$提醒我有可能会出现来回走的情况,而状压转移就一次,无 ...

  3. 【POJ - 3414】Pots(bfs)

    Pots 直接上中文 Descriptions: 给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i)        将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DRO ...

  4. 【HDU - 3085】Nightmare Ⅱ(bfs)

    -->Nightmare Ⅱ 原题太复杂,直接简单的讲中文吧 Descriptions: X表示墙 .表示路 M,G表示两个人 Z表示鬼 M要去找G但是有两个鬼(Z)会阻碍他们,每一轮都是M和G ...

  5. 【HDU - 3533】Escape(bfs)

    Escape  Descriptions: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到 ...

  6. 【Aizu - 0558】Cheese(bfs)

    -->Cheese 原文是日语,这里就写中文了 Descriptions: 在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老 ...

  7. 【LightOJ 1422】Halloween Costumes(区间DP)

    题 题意 告诉我们每天要穿第几号衣服,规定可以套好多衣服,所以每天可以套上一件新的该号衣服,也可以脱掉一直到该号衣服在最外面.求最少需要几件衣服. 分析 DP,dp[i][j]表示第i天到第j天不脱第 ...

  8. 【LightOJ 1136】Division by 3(简单数学)

    BUPT2017 wintertraining(16) #5 C HDU - 1021 题意 1, 12, 123, 1234, ..., 12345678910, ... 问第a到第b个数(incl ...

  9. 【LightOJ 1081】Square Queries(二维RMQ降维)

    Little Tommy is playing a game. The game is played on a 2D N x N grid. There is an integer in each c ...

  10. 【HIHOCODER 1055】 刷油漆(树上背包)

    描述 小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保 ...

随机推荐

  1. 【转】如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    网上看到关于微信官方的跨平台跨业务的终端基础组件Mars的介绍文章,转载这这里.源代码: https://github.com/Tencent/mars作者:男人链接:https://zhuanlan ...

  2. 信息安全意识教育日历——By 安全牛

    安全牛:企业即使投入再好的信息安全技术和产品,也难以解决内部威胁以及社会工程等攻击手段,无法做到全面有效地保护企业信息资产.而通过开展员工的信息安全意识培训教育工作,不仅能降低企业风险.满足合规要求, ...

  3. sql server等待类型

    sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...

  4. 006-虚拟机中centos7实现nat静态ip上网

    1.设置虚拟机网卡VMnet8 2.修改虚拟机参数 (1).点击编辑-->虚拟网络编辑器,如下图设置 (2)nat设置如下[使用默认即可,记住网关.掩码等,非常重要,因为在centos里面要设置 ...

  5. Angular4中常用管道(转载)

    Angular4中常用管道 通常我们需要使用管道实现对数据的格式化,Angular4中的管道和之前有了一些变化,下面说一些常用的管道. 一.大小写转换管道 uppercase将字符串转换为大写 low ...

  6. Springboot入门-日志框架配置(转载)

    默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台. Logback是log4j框架的作者开发的新一代日志框架,它效率更高.能够适应诸多的运行环境,同时天然支 ...

  7. 用仿ActionScript的语法来编写html5——第三篇,鼠标事件与游戏人物移动

    第三篇,鼠标事件与游戏人物移动 一,假设假设,所有可添加鼠标事件的对象,都有一个mouseEvent方法,添加的鼠标事件同过这个mouseEvent来调用.这样的话,添加鼠标事件,其实只需要给canv ...

  8. selector模块

    selector selectors模块,此模块允许高级和高效的I / O多路复用,构建在select模块原语上.鼓励用户使用此模块,除非他们需要精确控制所使用的操作系统级原语.( 默认使用epoll ...

  9. Java泛型二:通配符的使用

    原文地址http://blog.csdn.net/lonelyroamer/article/details/7927212 通配符有三种: 1.无限定通配符   形式<?> 2.上边界限定 ...

  10. Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary

    地址:http://codeforces.com/contest/766/problem/D 题目: D. Mahmoud and a Dictionary time limit per test 4 ...