分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <cmath>
#include <queue>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const int N=1e3+;
struct Node{
int t,x,y;
};
queue<Node>q;
char c[N][N];
int s[][N][N],n,m;
char p[]="0+-|^><vLRUD*";
int a[]={,,,,,,,,,,,,};
int b[]={,,,,,,,,,,,,};
int dp[][N][N];
bool judgel(int x){
if(x==||x==||x==||x==||x==||x==)
return true;
return false;
}
bool judger(int x){
if(x==||x==||x==||x==||x==||x==)
return true;
return false;
}
bool judgeu(int x){
if(x==||x==||x==||x==||x==||x==)
return true;
return false;
}
bool judged(int x){
if(x==||x==||x==||x==||x==||x==)
return true;
return false;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%s",c[i]+);
for(int i=;i<=n;++i)
{
for(int j=;j<=m;++j)
{
for(int k=;k<=;++k)
if(c[i][j]==p[k])
{
s[][i][j]=a[k];
break;
}
}
}
for(int k=;k<=;++k)
{
for(int i=;i<=n;++i)
{
for(int j=;j<=m;++j)
{
s[k][i][j]=b[s[k-][i][j]];
}
}
}
Node st,aim;
scanf("%d%d%d%d",&st.x,&st.y,&aim.x,&aim.y);
memset(dp,-,sizeof(dp));
st.t=;
q.push(st);dp[][st.x][st.y]=;
int ans=INF;
while(!q.empty()){
Node u=q.front();
q.pop();
if(u.x==aim.x&&u.y==aim.y){
break;
}
Node e=u;e.t=(e.t+)%;
if(dp[e.t][e.x][e.y]==-){
dp[e.t][e.x][e.y]=dp[u.t][e.x][e.y]+;
q.push(e);
}
if(u.y>&&judgel(s[u.t][u.x][u.y])&&judger(s[u.t][u.x][u.y-])){
if(dp[u.t][u.x][u.y-]==-){
e=u;--e.y;
dp[e.t][e.x][e.y]=dp[u.t][u.x][u.y]+;
q.push(e);
}
}
if(u.y<m&&judger(s[u.t][u.x][u.y])&&judgel(s[u.t][u.x][u.y+])){
if(dp[u.t][u.x][u.y+]==-){
e=u;++e.y;
dp[e.t][e.x][e.y]=dp[u.t][u.x][u.y]+;
q.push(e);
}
}
if(u.x>&&judgeu(s[u.t][u.x][u.y])&&judged(s[u.t][u.x-][u.y])){
if(dp[u.t][u.x-][u.y]==-){
e=u;--e.x;
dp[e.t][e.x][e.y]=dp[u.t][u.x][u.y]+;
q.push(e);
}
}
if(u.x<n&&judged(s[u.t][u.x][u.y])&&judgeu(s[u.t][u.x+][u.y])){
if(dp[u.t][u.x+][u.y]==-){
e=u;++e.x;
dp[e.t][e.x][e.y]=dp[u.t][u.x][u.y]+;
q.push(e);
}
}
}
for(int i=;i<;++i)
if(dp[i][aim.x][aim.y]!=-){
ans=min(dp[i][aim.x][aim.y],ans);
}
if(ans==INF)ans=-;
printf("%d\n",ans);
return ;
}

codeforces 676D Theseus and labyrinth BFS搜索的更多相关文章

  1. CodeForces 676D Theseus and labyrinth

    最短路. $dis[i][j][k]$记录到点$(i,j)$,门的状态为$k$时的最短路.转移的时候有$8$种方案,即直接走向周围四个点,或者进行旋转.比较烦的是判断两个相邻的点在状态$k$下是否连通 ...

  2. Codeforces Round #354 (Div. 2) D. Theseus and labyrinth bfs

    D. Theseus and labyrinth 题目连接: http://www.codeforces.com/contest/676/problem/D Description Theseus h ...

  3. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  4. CodeForces 540C Ice Cave (BFS)

    http://codeforces.com/problemset/problem/540/C       Ice Cave Time Limit:2000MS     Memory Limit:262 ...

  5. hdu 1240:Asteroids!(三维BFS搜索)

    Asteroids! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  6. hiho_1139_二分+bfs搜索

    题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分     最小化最大值,考虑采用二分搜索.对所有的边长进 ...

  7. Codeforces 301_div.2_Ice Cave(BFS走冰块)

    Ice Cave Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Descripti ...

  8. BFS搜索

    参考博客:[算法入门]广度/宽度优先搜索(BFS) 适用问题:一个解/最优解 重点:我们怎么运用队列?怎么记录路径? 假设我们要找寻一条从V0到V6的最短路径.(明显看出这条最短路径就是V0-> ...

  9. Horse Pro(带负坐标的bfs搜索)

    Horse Pro bfs搜索,但图中存在负值坐标,两种方法解决. 用数组标记,将原点设为300,300 用map标记 http://oj.jxust.edu.cn/contest/Problem?i ...

随机推荐

  1. 然爸读书笔记(2013-5)----Rework(重来)

    (1)你没有必要耗尽你一生的积蓄,承担财务风险. (2)你可以一边继续日常工作,一边开始创业,这样随时都能有现金满足需要.你甚至不需要办公室. 现在可以在家工作,和从未见面离你千里之外的人合作. (3 ...

  2. sshj ,ssh , springmvc pom.xml

    记录下项目中的 pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...

  3. 扫盲Linq知识

    LINQ,语言集成查询(Language Integrated Query),是在.NET Framework 3.5 中出现的技术. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形 ...

  4. robots.txt协议-互联网robots搜索规范

    最近在看搜索爬虫相关的,挺有趣的,记录一些信息备用. robots.txt官方说明网站 http://www.robotstxt.org/ robots.txt原则 Robots协议是国际互联网界通行 ...

  5. Unity3D的几种坐标系

    原地址:http://www.cnblogs.com/martianzone/p/3371789.html http://www.cnblogs.com/88999660/archive/2013/0 ...

  6. Flask, Tornado, GEvent, 以及它们的结合的性能比较

    Flask, Tornado, GEvent, 以及它们的结合的性能比较 英文: http://blog.wensheng.com/2011/10/performance-of-flask-torna ...

  7. linux fork函数与vfork函数

    一.fork1. 调用方法#include <sys/types.h>#include <unistd.h> pid_t fork(void);正确返回:在父进程中返回子进程的 ...

  8. navicat 导入sql文件乱码问题解决

    一,右键数据库链接,点击链接属性,修改以下信息,如图: 选择高级选项页签==>去掉使用MySQL字符集复选框==>选择GB2312字符编码==>点击确定 三,控制台后,show va ...

  9. cocos2d-html5 onEnter init ctor构造函数 ----js特有特性(和c++有一点不一样)

    ctor 构造函数, new 一个对象的时候调用-----coco2d-js , 默认ctor,为对象的构造函数,其它也可以默认其它函数为构造函数. 说白了就是: ctor构造函数 new 对象后自动 ...

  10. python之高性能网络编程并发框架eventlet实例

    http://blog.csdn.net/mingzznet/article/details/38388299 前言: 虽然 eventlet 封装成了非常类似标准线程库的形式,但线程和eventle ...