【lightoj-1055】Going Together(BFS)
链接: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)的更多相关文章
- 【LightOJ - 1205】Palindromic Numbers
[链接]https://cn.vjudge.net/problem/LightOJ-1205 [题意] 求出L..R范围内的回文个数 [题解] 数位DP; 先求出1..x里面的回文串个数.则做一下前缀 ...
- 【BZOJ 3049】【USACO2013 Jan】Island Travels BFS+状压DP
这是今天下午的互测题,只得了60多分 分析一下错因: $dis[i][j]$只记录了相邻的两个岛屿之间的距离,我一开始以为可以,后来$charge$提醒我有可能会出现来回走的情况,而状压转移就一次,无 ...
- 【POJ - 3414】Pots(bfs)
Pots 直接上中文 Descriptions: 给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DRO ...
- 【HDU - 3085】Nightmare Ⅱ(bfs)
-->Nightmare Ⅱ 原题太复杂,直接简单的讲中文吧 Descriptions: X表示墙 .表示路 M,G表示两个人 Z表示鬼 M要去找G但是有两个鬼(Z)会阻碍他们,每一轮都是M和G ...
- 【HDU - 3533】Escape(bfs)
Escape Descriptions: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到 ...
- 【Aizu - 0558】Cheese(bfs)
-->Cheese 原文是日语,这里就写中文了 Descriptions: 在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老 ...
- 【LightOJ 1422】Halloween Costumes(区间DP)
题 题意 告诉我们每天要穿第几号衣服,规定可以套好多衣服,所以每天可以套上一件新的该号衣服,也可以脱掉一直到该号衣服在最外面.求最少需要几件衣服. 分析 DP,dp[i][j]表示第i天到第j天不脱第 ...
- 【LightOJ 1136】Division by 3(简单数学)
BUPT2017 wintertraining(16) #5 C HDU - 1021 题意 1, 12, 123, 1234, ..., 12345678910, ... 问第a到第b个数(incl ...
- 【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 ...
- 【HIHOCODER 1055】 刷油漆(树上背包)
描述 小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保 ...
随机推荐
- 解决跨域HttpResponseJsonCORS, HttpResponseCORS 返回字典数据
#!/usr/bin/python # -*- coding: UTF-8 -*- import json from django.http import HttpResponse def HttpR ...
- Selenium 安装与卸载
安装: 在cmd中键入pip install selenium==3.6.0(等号后面的为版本号),并点击回车,当出现Successfully installed selenium-3.6.0即表示已 ...
- 神经网络中的数据预处理方法 Data Preprocessing
0.Principal component analysis (PCA) Principal component analysis (PCA) is a statistical procedure t ...
- python中unicode和str的组合
python中unicode对象和str对象拼接在一起,会自动将str对象转换成unicode对象 即:a="aa" b=u"bb" c=a+b type(c) ...
- CoreThink开发(十二)更改默认出错异常页防止暴露敏感数据
默认的异常页会打印文件位置,而且是绝对路径,会打印SQL语句,真实上线一定不要用这个默认的,而且关闭trace关闭调试模式也不行. 针对CoreThink1.2 ThinkPHP3.2 这个文件在 A ...
- python 2.7.11安装pywin32过程中 停止工作问题
问题描述 由于需要安装pywin32,官网下载了pywin32-220.win32-py2.7.exe.注意:你的pywin32是32位还是64位取决于你的python,而不是你的电脑.CMD上可以查 ...
- day2 笔记
while 条件: # 循环体 # 如果条件为真,那么循环体则执行 # 如果条件为假,那么循环体不执行 循环中止语句 如果在循环的过程中,因为某 ...
- Cannot format given Object as a Date
这个小错挺有意思的,记录一下 导出Excel的时候,同事直接用 format …… 前提:数据库中该字段是 Timestamp ---- 2016-06-20 22:49:02.967 写个测试说明一 ...
- 第一课Linux系统安装知识(1)
在做linux下C\C++开发,首先得安装个Linux系统,这节课记录相关系统安装的知识,本文记录虚拟机安装部分. 在linux系统中,现在一般生手都用桌面版,比如比较多人使用的是 ...
- form表单4种提交方式
<!DOCTYPE html><html> <head> <title>JavaScript表单提交四种方式</title> <met ...