Codeforces 676D Theseus and labyrinth 模拟+bfs

【Ensp】FTP服务器设置和FTP解析 大部分的多媒体多媒体应用协议,如SIP,FTP,NetMeeting协议等,使用约定的固定端口来初始化一个控制连接,再动态地选择端口用于数据传输,并且这些端口选择是不可预测的。在防火墙设置时,可以通过ASPF(应用层报文过滤)中的Server Map表来满足多通道协议的正常工作,它正常检测应用层报文信息,并动态地根据报文内容创建和删除临时的Server Map表项,以允许其它非约定端口通过防火墙。(5)我们可以在路由器或能访问ftp服务器的设备上,通过cli命令行的方式来访问ftp服务器。 阅读详情

题意:有一个n*m的地图,每个点代表一个房间,每个房间可能有四个门,例如>代表右边只有一个门在右边即只能向右走,L代表左边没有门只能除了左其他都可以走等等。现在给出起点和终点,每次你可以把全部房间旋转90度或者移动到相邻的房间,但前提是两个房间之间都有有门,现在要你求起点出发到终点的最少时间。

分析:vis肯定不能有step步数的标记。。 那么转多少次好像没有限制,,可是还是要只能开4的大小。然后转的过程可以在走的时候每一次都判断转不转。。这样就只需要开4.。

大佬的代码。

#include<iostream>
#include<stdio.h>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=1001;
const int INF=0x3f3f3f3f;
int n,m;
char s[maxn][maxn];
bool door[maxn][maxn][4];
int sx,sy;
int ex,ey;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int dis[maxn][maxn][4];
void deal(int x,int y)
{
    switch (s[x][y])
    {
        case '+':
        {
            door[x][y][0]=true;
            door[x][y][1]=true;
            door[x][y][2]=true;
            door[x][y][3]=true;
            break;
        }
        case '-':
        {
            door[x][y][1]=true;
            door[x][y][3]=true;
            break;
        }
        case '|':
        {
            door[x][y][0]=true;
            door[x][y][2]=true;
            break;
        }
        case '^':
        {
            door[x][y][0]=true;
            break;
        }
        case '>':
        {
            door[x][y][1]=true;
            break;
        }
        case '<':
        {
            door[x][y][3]=true;
            break;
        }
        case 'v':
        {
            door[x][y][2]=true;
            break;
        }
        case 'L':
        {
            door[x][y][0]=true;
            door[x][y][1]=true;
            door[x][y][2]=true;
            break;
        }
        case 'R':
        {
            door[x][y][0]=true;
            door[x][y][2]=true;
            door[x][y][3]=true;
            break;
        }
        case 'U':
        {
            door[x][y][1]=true;
            door[x][y][2]=true;
            door[x][y][3]=true;
            break;
        }
        case 'D':
        {
            door[x][y][0]=true;
            door[x][y][1]=true;
            door[x][y][3]=true;
            break;
        }
    }
}
struct Node
{
    int x,y,d;
    int dist;
    bool operator <(const Node& node) const
    {
        return dist>node.dist;
    }
    Node(int _x=0,int _y=0,int _d=0,int _dist=0):x(_x),y(_y),d(_d),dist(_dist){}
};
void dj()
{
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
        {
            for(int k=0;k<4;++k)
            {

                dis[i][j][k]=INF;
                //cout<<i<<" "<<j<<" "<<dist[i][j]
            }
        }
    }
    dis[sx][sy][0]=0;
    priority_queue<Node>que;
    while(!que.empty()) que.pop();
    que.push(Node(sx,sy,0,0));
    Node tmp;
    int x,y,d;
    int nx,ny,nd;
    int dist;
    while(!que.empty())
    {
        tmp=que.top(); que.pop();
        //cout<<"yes"<<endl;
        x=tmp.x;
        y=tmp.y;
        d=tmp.d;
        //cout<<x<<" "<<y<<" "<<d<<endl;
        dist=tmp.dist;
        if(dis[x][y][d]<dist) continue;
        int lx=(d+1)%4;
        if(dis[x][y][lx]>dist+1)
        {
            dis[x][y][lx]=dist+1;
            que.push(Node(x,y,lx,dis[x][y][lx]));
        }
        for(int l=0;l<4;++l)
                {
                    nx=x+dx[l];
                    ny=y+dy[l];
                    if(nx<0||nx>=n||ny<0||ny>=m) continue;
                    int dr1=(l-d+4)%4;
                    int dr2=(l-d+6)%4;
                    if(door[x][y][dr1]&&door[nx][ny][dr2]&&dis[nx][ny][d]>dist+1)
                    {
                        dis[nx][ny][d]=dist+1;
                        que.push(Node(nx,ny,d,dist+1));
                    }
                }
    }
}
int main()
{
    memset(door,false,sizeof(door));
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;++i) scanf("%s",s[i]);
    scanf("%d%d",&sx,&sy);
    --sx; --sy;
    scanf("%d%d",&ex,&ey);
    --ex; --ey;
    for(int i=0;i<n;++i)
    for(int j=0;j<m;++j) deal(i,j);
    int nx,ny;
    dj();
    //cout<<"yes"<<endl;
    int ans=INF;
    for(int i=0;i<4;++i) ans=min(ans,dis[ex][ey][i]);
    if(ans==INF) printf("-1\n");
    else printf("%d\n",ans);
    return 0;
}
实战指南:基于Windows Server构建企业级AAA认证体系 本文详细介绍了如何在Windows Server环境下构建企业级AAA认证体系,涵盖AD域服务部署、NPS服务器配置及华为设备对接实战。通过整合Radius协议与AD域账号管理,实现网络设备的统一认证与权限控制,提升企业IT安全管理效率。特别适用于需要零成本实现AAA认证的中大型企业。 阅读详情

相关推荐

Nginx反向代理HTTPS服务报错排查:The plain HTTP request was sent to HTTPS port

在Web服务架构中,反向代理是连接客户端与后端应用的关键组件,它通过转发请求实现负载均衡和安全隔离。其工作原理涉及监听端口、解析协议头部,并根据配置将请求路由至上游服务器。这一机制的技术价值在于提升系统可扩展性、简化部署,并增强安全性。在HTTPS场景下,代理服务器需正确处理SSL/TLS终止与传递,若配置不当,常引发协议不匹配问题。例如,当Nginx将解密后的HTTP请求转发至期待HTTPS的后端,或客户端直接向SSL端口发送明文请求时,便会出现经典报错“The plain HTTP request wa

weixin_33391446的博客 401

CodeForces 616C:The Labyrinth(BFS)

You are given a rectangular field of n × m cells. Each cell is either empty or impassable (contains an obstacle). Empty cells are marked with '.', impassable cells are marked with '*'. Let's call two empty cell

并非所有流浪者都迷失了自我 742

Intel Arc显卡玩《三角洲行动》报错?手把手教你修改注册表跳过验证

本文针对Intel Arc显卡用户在运行《三角洲行动》时遇到的驱动验证报错问题,提供了详细的解决方案。通过安全修改Windows注册表,添加特定键值以跳过游戏驱动兼容性验证,并结合游戏内图形设置与Intel驱动面板的优化建议,旨在帮助玩家顺利进入游戏并提升游戏帧率与运行稳定性。

weixin_29310605的博客 696

codeforces-D- Labyrinth

题目链接 大意:给一个图,向右和向左走的次数是有限的,但是向上和向下可以无限走,问能经过图中哪些点。 题解:最开始写了一个简单的bfs,没过,然后学长给了一个样例(下面会写到),确实普通的bfs有些情况会漏掉。后来改为每一次push的时候,先判断上下的点,并添加到队头,然后判断左右的点,并添加到队尾。(并不知道为什么这样写) #include&lt;cstdio&gt; #include&...

leo_10的博客 271

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4931

小案例:利用图床自动化批量上传图片并获取图片链接

用python爬虫写了一个小脚本,用来自动上传图片到图床,然后返回链接,我们只需直接复制链接就可以。(需要安装Requests库) 因为不同图床需要提交的POST表单不一致,所以在这里我用ImgURL图床做示范,如果大家有需求,可自行修改代码。使用脚本的时候,我们只需把需要上传的图片和这个脚本放在同一个文件夹中,然后运行脚本,稍作等待,看到提示时就可以在脚本运行文件夹中发现一个名为“图片链接地址.txt”的文件,里面就是图片链接啦! 四、图片链接地址.txt(单张图片):...

采菊东篱下,Python满乾坤! 4413

Codeforces Round #516 (Div. 2) D. Labyrinth (简单BFS)

题目链接:http://codeforces.com/contest/1064/problem/D #include&lt;bits/stdc++.h&gt; using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)&lt;(z);(x)++) #define read(x,y...

满月照亮的路 352

【已解决,极简单!!】求助,R语言读取csv文件各种报错

【已解决】本来之前没问题,今天更新了Rstudioh以及R,就各种报错了。也看了目前能读取到的文件,从第一个中文字符直接就没有了。也就是说 还是读取中文字符的问题?新人初学,求大佬轻喷!

youyouluming945的博客 3878

编程入门必作题

1.  给定等式  A B C D E     其中每个字母代表一个数字,且不同数字对应不                    D F G     同字母。编程求出这些数字并且打出这个数字的             +      D F G     算术计算竖式。             ───────                X Y Z D E   2. A、B、C、D、

liang851128的专栏 7051

git连接华为软件开发云

我用的是github客户端的git shell 连接。用git bash也可以github客户端下载地址:https://desktop.github.com/1.在华为软件开发云上创建代码仓库2.在本地创建密钥SSH密钥帮助文档公钥是代码托管服务(CodeHub)识别您的用户身份的一种认证方式,通过公钥,您可以将本地git项目与代码托管服务(CodeHub)建立联系, 然后您就可以很方便的将本地...

sigmeta的博客 2114

浅谈专项测试之弱网络测试

浅谈专项测试之弱网络测试 一.弱网络测试背景 移动端产品的使用并非完全都是在流畅的wifi环境,大部分用户主要使用4G,3G,2G等网络,另外因为移动端产品使用的场景多变,如进公交,上地铁,坐电梯,使得弱网测试显得尤为重要。考虑到各种场景的客户端展示及容错,提升产品的印象和用户体验,提高产品的健壮性,弱网测试必不可少。 二.弱网络测试建议 网下需要进行功能点测试,无网络测试,网络切换测试等,测试过程除了关注功能点的实现,还应关注用户体验等各个方面 三.弱网络测试通用功能点总结 四.弱网络测试用例实例

ITstudy001的博客 1011

Codeforces Round #516 (Div. 2) D. Labyrinth ---- BFS+思维

题目传送门 做法: 优先选取列,然后在向左右扩展。 然鹅,有思路,却不会处理,看了本场Rank1,有双端队列巧妙处理列和行的优先级,才发现处理更简洁+易懂。ORZ 我们优先将列放到队首,因为列是不需要消耗步数的,然后再将左右放到队尾,然后依次访问+标记,即可。 AC代码: #include&lt;bits/stdc++.h&gt; #define IO ios_base::s...

WangMeow --- ᶘ ᵒᴥᵒᶅ ฅ^•ﻌ•^ฅ 200

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7349

Codeforces 676D Theseus and labyrinth【模拟+Bfs】

D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Theseus has just arrived to Crete to fight M

mengxiang000000 460

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Codeforces 676D Theseus and labyrinth

题目链接:http://codeforces.com/problemset/problem/676/D 题意:一个n×m的地图,每个房间向四个方向可能会有门,给定起点和终点,求可以到达终点的最小操作数。每次操作可以将所有房间的门顺时针旋转90,或者可以到达相邻的房间(两个房间之间必须都有门)。 思路:bfs搜索。flag[i][j][k]表示(i,j)点上转向k次的状态是否已经

DS-K的博客 511

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

codeforces -676D(Theseus and labyrinth)

codeforces -676D(Theseus and labyrinth) 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include...

weixin_30553837的博客 116

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

codeforces_676D. Theseus and labyrinth(bfs)

D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Theseus has just arrived to Crete

凳子 583

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

题目链接:http://codeforces.com/contest/676/problem/D D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input standard input output sta

hkh746392783的专栏 729

Codeforces 676D Theseus and labyrinth(最短路)

题意: 给定一个迷宫,起点和终点,每一个可以走的格子上都有不同的门的情况,每次都可以选择到达周围符合条件的格子或者是让所有格子的门顺时针旋转一下,问你从起点到重点的最短距离。 解法: 因为每次都是转90度,所以对于每个格子来说,都有四个状态,所以建立一个分层图,每层都代表个点的一种状态,然后直接BFS即可。 代码:// // Created by CQU_CST_WuErli // C

只玩三国的程序猿的专栏 600

Codeforces 676D - Theseus and labyrinth 【BFS(二进制优化迷宫旋转)】

Codeforces 676D - Theseus and labyrinth 【BFS(二进制优化迷宫旋转)】 Theseus has just arrived to Crete to fight Minotaur. He found a labyrinth that has a form of a rectangular field of size n × m and consists of blocks of size 1 × 1. Each block of the labyrinth has a

Dust_heart的博客 608

codeforces 676D Theseus and labyrinth BFS搜索

分析:一个n*m的矩阵,每个格子有12个状态,每次按一次,每个格子转90度,所以整个矩阵只有4种状态,然后爆搜就好了 #include <cstdio> #include <iostream> #include <algorithm> #include <string.h> #include <stdlib.h&gt...

weixin_30362083的博客 101

[Codeforces Round #354 DIV2D (CF676D)] Theseus and labyrinth

题意n⋅mn\cdot m网格,每个房间四个门存在与否有1616种状态。每一秒可以从一个格子走到相邻格子(当且仅当两格子有互通的门),或者将所有的格子顺时针旋转90∘90^{\circ}。询问从起始点走到终点最少用时。题解拆点,每个格子拆成四种状态的点,然后bfsbfs,就是写起来比较麻烦。代码/// by ztx #include <bits/stdc++.h> // 1 1 1 1 //

ztx 363

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

D. Theseus and labyrinth 题目连接: http://www.codeforces.com/contest/676/problem/D Description Theseus has just arrived to Crete to fight Minotaur. He found a labyrinth that has a form of a rectangular fi...

weixin_30252709的博客 80

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

题目链接:http://codeforces.com/contest/676/problem/D 题意: 给一个n*m的迷宫,每个格子有一个字符,代表有几个门和门的方向。每秒允许两种操作,1.移动到相对应的门都通的邻节点 2.原地不动,地图上的每个门都顺时针转90° 问你从起点到终点最短距离 思路: 暴搜就行了… flag是代表转了几次 fun是为了找到当前结点原地图能走的门 如果原

humeay的博客 461

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

Theseus and labyrinth time limit :3 seconds memory limit :256 megabytes 题目连接: http://www.codeforces.com/contest/676/problem/D Description Theseus has just arrived to Crete to fight Mi...

weixin_30552635的博客 94

A. Ostap and Grasshopper

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output On the way to Rio de Janeiro Ostap kills time playing with a gra

无知的我 1433
上一篇: hdu 4436 str2int (SAM)(待补)
下一篇: Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值