codevs 3290 华容道

Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding NLP添加新词汇 阅读详情

go to the problem–>
*对于题解的整理??迷。。。

题目描述 Description

小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间。
小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的:

在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的;
有些棋子是固定的,有些棋子则是可以移动的;
任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空白格子上。 游戏的目的是把某个指定位置可以活动的棋子移动到目标位置。
给定一个棋盘,游戏可以玩 q 次,当然,每次棋盘上固定的格子是不会变的,但是棋盘上空白的格子的初始位置、指定的可移动的棋子的初始位置和目标位置却可能不同。第 i 次玩的时候,空白的格子在第 EX_i 行第 EY_i 列,指定的可移动棋子的初始位置为第 SX_i 行第 SY_i 列,目标位置为第 TX_i 行第 TY_i 列。
假设小 B 每秒钟能进行一次移动棋子的操作,而其他操作的时间都可以忽略不计。请你告诉小 B 每一次游戏所需要的最少时间,或者告诉他不可能完成游戏。

输入描述 Input Description

第一行有 3 个整数,每两个整数之间用一个空格隔开,依次表示 n、m 和 q;
接下来的 n 行描述一个 n*m 的棋盘,每行有 m 个整数,每两个整数之间用一个空格隔开,每个整数描述棋盘上一个格子的状态,0 表示该格子上的棋子是固定的,1 表示该格子上的棋子可以移动或者该格子是空白的。
接下来的 q 行,每行包含 6 个整数依次是 EX_i、EY_i、SX_i、SY_i、TX_i、TY_i,每两个整数之间用一个空格隔开,表示每次游戏空白格子的位置,指定棋子的初始位置和目标位置。

输出描述 Output Description

输出有 q 行,每行包含 1 个整数,表示每次游戏所需要的最少时间,如果某次游戏无法完成目标则输出-1。

样例输入 Sample Input

3 4 2
0 1 1 1
0 1 1 0
0 1 0 0
3 2 1 2 2 2
1 2 2 2 3 2

样例输出 Sample Output

2
-1

思路:

移动棋子太麻烦,转换角度,移动空白格子。

指定棋子自己肯定无法移动,若要移动身边必须靠着空白格子。

空白格子初始时有可能并不靠着指定棋子的初始位置,因此需要先将空白格子移动指定棋子身边。

指定棋子若要移动到身边某一位置时空白格子必须预先到达那个位置。并且在移动后两者的位置互换。

空白格子移动到某一位置所花费的时间可以用bfs求出。(小技巧:空白格子从(i,j)到(x,y)和从(x,y)到(i,j)是一样的)

指定棋子移动到某一位置所花费的时间与他目前的状态有关:指定棋子的位置、空白格子的位置、要移动到的位置。

为了节省空间,空白格子的位置和要移动到的位置可以由他们与指定棋子的位置关系代替。

由于题目是给定棋盘,有q次询问,询问中棋盘不变。因此考虑对棋盘进行预处理,询问时只需求解。

设 move[i][j][k][e]表示空白格子在棋子的k方位时,位置为i,j的棋子要移动到方位e的位置所需的花费。

可知 move[i][j][k][e]=空白格子移动到指定位置的花费+1.

预处理出move数组后,对于每次询问,设状态为(x,y,k),其中k表示空白格子相对于x,y的位置。设转移到位置i,j ,可知 状态(x,y,k)与状态(i,j,k’)间抽象出了一条权值为move[i][j][k][e]的边。

SPFA求初始状态到目标状态的最短路。

得解。

*特别的:

1.指定棋子移动前空白格子的移动不能通过该棋子。
2.记得预处理。
3.记得判断边界。

代码ヾノ≧∀≦)o
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;

const int inf=1061109567;
int n,m,q,ex,ey,sx,sy,tx,ty,ans;
int a[35][35],move[35][35][5][5],dis[35][35][5];
int used[35][35],Used[35][35][5];
int X[4]={-1,1,0,0},  // 0:up 1:down 2:right 3:left
    Y[4]={0,0,1,-1};
struct maple{
    int x,y,k;
};

bool can(int x,int y)
{
    if(x<1||x>n||y<1||y>m||!a[x][y]) return false;
    return true;
}
int Bfs(int fx,int fy,int tx,int ty,int I,int J)
{
    if(fx==tx&&fy==ty) return 0;
    memset(used,0,sizeof(used));
    queue<maple> Q;
    Q.push((maple){fx,fy,0});
    used[fx][fy]=1;
    used[I][J]=1;
    while(!Q.empty())
    {
        maple b=Q.front();
        Q.pop();
        for(int i=0;i<4;++i)
        {
            int x=b.x+X[i],y=b.y+Y[i];
            if(!used[x][y]&&can(x,y))
            {
                used[x][y]=1;
                Q.push((maple){ x,y,b.k+1});
                if(x==tx&&y==ty) return b.k+1;
            }
        }
    }
    return inf;
}
void Done_move()
{
    memset(move,63,sizeof(move));
    for(int i=1;i<=n;++i)
       for(int j=1;j<=m;++j)
         if(a[i][j])
           for(int k=0;k<4;++k)
           {
              int x=i+X[k],y=j+Y[k];
              if(!can(x,y)) continue;
              for(int e=0;e<4;++e)
              {
                  int xx=i+X[e],yy=j+Y[e];
                  if(!can(xx,yy))  continue;
                  if(k>e) move[i][j][k][e]=move[i][j][e][k];
                  else move[i][j][k][e]=Bfs(x,y,xx,yy,i,j)+1;
              }
           }
}
void SPFA()
{
    if(sx==tx&&sy==ty) {
        printf("0\n");
        return ;
    }
    queue<maple>Q;
    ans=inf;
    memset(dis,63,sizeof(dis));
    memset(Used,0,sizeof(Used));
    for(int i=0;i<4;++i)
    {
        int x=sx+X[i],y=sy+Y[i];
        if(!can(x,y)) continue;
        Q.push((maple){sx,sy,i});
        Used[sx][sy][i]=1;
        dis[sx][sy][i]=Bfs(ex,ey,x,y,sx,sy);
    }
    while(!Q.empty())
    {
        maple b=Q.front();
        Q.pop();
        Used[b.x][b.y][b.k]=0;
        for(int i=0;i<4;++i)
        {
            int x=b.x+X[i],y=b.y+Y[i],k=i;
            if(i==0||i==2) ++k;
            else --k;
            if(can(x,y)&&dis[x][y][k]>dis[b.x][b.y][b.k]+move[b.x][b.y][b.k][i])
            {
                dis[x][y][k]=dis[b.x][b.y][b.k]+move[b.x][b.y][b.k][i];
                if(!Used[x][y][k]) 
                {
                    Q.push((maple){x,y,k});
                    Used[x][y][k]=1;
                }
            }
        }
    }
    for(int i=0;i<4;++i) ans=min(ans,dis[tx][ty][i]);
    if(ans<inf) printf("%d\n",ans);
    else printf("-1\n");
}
int main()
{
    scanf("%d%d%d",&n,&m,&q);
    for(int i=1;i<=n;++i)
      for(int j=1;j<=m;++j)
         scanf("%d",&a[i][j]);
    Done_move();
    for(int i=1;i<=q;++i)
    {
        scanf("%d%d%d%d%d%d",&ex,&ey,&sx,&sy,&tx,&ty);
        SPFA();
    }
    return 0;
}
面向边缘计算的YOLOv12模型剪枝-蒸馏联合优化实战教程** 这套剪枝-蒸馏联合方案的优势在于其系统性和可靠性。它不是单一的技巧,而是一套完整的工程流程,确保了从研发到部署的无缝衔接。 阅读详情

相关推荐

逆向工程师必备:用MDL绕过游戏保护读取内存数据的完整流程(附POC代码)

本文深入探讨了内核级内存访问技术,重点介绍了如何利用MDL(Memory Descriptor List)机制稳定、隐蔽地绕过游戏反作弊系统读取进程内存。通过对比MmCopyVirtualMemory等方法的优劣,提供了完整的MDL映射实战代码与反检测策略,为逆向工程师在内核态进行安全内存操作提供了专业指导。

weixin_29227425的博客 623

【最短路】【bfs】[NOIP2013] codevs3290 华容道

记得这题暴力有70...十分良心,然而它卡A*……(好像A*的估值很忧伤) 本来YY出了很诡异的姿势。。然后发现很难写……想弃疗…… 最后还是按网上流传的方法做的..不过网上的代码都好繁琐啊 = =差评…… 太久没有写代码真的生疏了不少..代码能力掉的很厉害。所以啊很多东西很久不碰也许就会忘掉了 还好最后还是成功AC掉了,谢天谢地 注意:1.加边不能加双向,因为虚拟节点可能会捣乱

每天心塞一点点 1507

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3738

codevs3290: [NOIP2013]华容道

题目链接 题目大意很简单,在一个不大于30×3030\times 30 的棋盘中,要求求出一个 #include #include #include #include #include using namespace std; const int N = 35, INF = 0x3f3f3f3f; const int MOVE[4][2] = {1, 0, -1, 0, 0, 1

DorikoTY的博客 509

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1483

[Python图像处理] 二.OpenCV+Numpy库读取与修改像素

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~ 同时推荐作者的C++图像系列知识: [数字图像处理] 一.MFC详解显示BMP格式图片 [数字图像处理] 二.MFC单文档分...

杨秀璋的专栏 3万+

华容道程序制作(基础部分)

林老师的专栏 9017

在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测

本文将详细介绍如何在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测,并提供实现源码

DT程序员的博客 705

【CodeVS 3290】【NOIP 2013】华容道

http://codevs.cn/problem/3290/ 据说2013年的noip非常难,但Purpleslz学长还是AK了。能A掉这道题真心orz。 设状态$(i,j,k)$表示目标棋子在$(i,j)$这个位置,空格在紧贴着目标棋子的$k$方向,$0≤k<4$。 因为目标棋子要移动,空格肯定在它旁边。往空格的方向走一步,空格便出现在它另一边。对于这两个状态连边,边权为1...

as2886089的博客 160

2025年微信小程序获取手机号授权登录注册详细教程(含服务端)。不弹窗原因以及减少组件用量的方法

前端把获取到的code传给后端,后端获取access_token和前端传过来的code,请求服务器接口,即可获取到手机号。

coderYYY的博客 3万+

【第33话:车辆控制】自动驾驶车辆运动学模型推导及详解

自动驾驶车辆的运动学模型以自行车模型为核心,通过状态方程。

一碗白开水一 831

【codevs3290】华容道

这题折腾了好几天,还跨度一次月考(直接咸鱼),最后做出了的时候钱包还不见了,心态booooooooom 这个题bfs+spfa,本来就很难想qwq,细节处理还贼麻烦,对比别人的ac程序还拍了半天,最后发现原来自己以为的一些可以放在后面的操作其实是不能放在后面的 不说了不说了,要说的全在代码里了QAQ,我要找钱包,还我钱包!!!!! #include<iostream> #i...

weixin_30291791的博客 104

AUTOSAR-SOMEIP配置总结

导入arxml之后someip信号一般以“pduSomeIp”开头或者“SomeIp”开头。以某个pdu为例,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。在导入arxml之后someip信号中有三个特殊的信号,形如“SdInstance”开头的信号,设置项“Pdu Default Partition Ref”主要是根据模块设计,配置相应的Ecuc核分区。“EcuC”模块主要关注“EcucPduCollection”中的“Pdus”下面的配置。

xiandang8023的博客 4653

codevs 3290 华容道(SPFA+bfs)

codevs 3290华容道 3290 华容道 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间。小 B 玩的华容道与经典的华容道...

weixin_30260399的博客 86

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

codevs 3290 noip 2013 Day2 T3华容道

唔马上要考noip了 泪目。希望rp++。莫名被archer圈粉。今天终于搞定这道题了 呼。。。所以orz当年4(+3)神犇。题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间。 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的:在一个

mars_ch的博客 970

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NOIP2013 D2T3 codevs 3290 洛谷 P1979 华容道 题解报告

咳咳,标题真长;;;题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间。 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的:在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个

xu326057825的博客 3516

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

洛谷1979/codevs3290 华容道,74行就写完了?

题目分析首先我们要明确,直接瞎广搜可以拿80分,所以怎么取舍是不是很明了? 如果你还是有一颗打正解的心… 好吧,祝你好运。 分析开始—— 此题核心:状态为点,建图,进行最短路状态为点什么状态比较重要?目标棋子的位置,这是肯定的。再者是空格的位置。 不过事实上,重要的状态是空格和目标棋子相邻(第二步会说),也就是一个状态(x,y,tmp)是一个点,表示目标棋子在(x,y)位置,tmp代表空格

litble的成(tui)长(fei)史 2184

[noip2013][codevs3290]华容道 bfs+spfa

const u:array[1..4] of integer=(-1,0,1,0); v:array[1..4] of integer=(0,1,0,-1); oo=100000000; type node=record x,y,cs,l:longint; end; var ft:t...

weixin_30740581的博客 99

【NOIP2013】华容道 SPFA+BFS预处理

最近没什么时间搞奥赛,所以这个题目看题解什么的弄了好久才懂。(懂了没?)可能吧,反正是AC了。 心疼一下2013年的学长学姐们,那一年对于我们这样的弱省基本上等于每一题都只有暴力。。。。 废话不多说了。我想写一篇题解尽量阐述清 CODEVS 题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到用编程来完成华容道:给定一种局面,华容道

Qantun_Mechanics的博客 869

[NOIP2013]华容道

[NOIP2013]华容道

Ironk的博客 559

【堆积如山的未解决题目OTZ】

从今天开始记一下哪些题目看过了但是没有解决的等着以后慢慢颓。。。 Codevs1210 http://codevs.cn/problem/1210/ 灾难 ZJOI2012 ROUND1 D2T1 Codevs1174 http://codevs.cn/problem/1174/ 靶形数独 NOIP2009 T4 Codevs1188 http://codevs.cn/problem/1

CreationAugust is 14 years old forever 1240

图论40题

遍历 练习:codevs1506 传话 codevs3728 联合权值2014noip提高 Codevs4511信息传递,2015NOIP提高 欧拉图 例题:poj2230 练习:poj 1386 Play on Words 练习:Codevs 2039 骑马修栅栏 哈密尔顿图   选做:2596 售货员的难题   拓扑排序   练习Code

lengxuenong的博客 844

codevs 1021 玛丽卡

戳这里前往原题—>>1021 玛丽卡时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master题目描述 Description麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复。因为她和他们不住在同一个城市,因此她开始准备她的长途旅行。在这个国家中每两个城市之间最多只有一条路相通,并且我们知道从一个城市到另一个城市路上所需花费的时间。麦克在车中无意中听到有一条路正在维修,

Loi_Mapleleaf的小池 1042

<学习笔记>关于图的理论知识

清北学堂今天讲图论的老师讲了很多我不知道的(。・・)ノ决定好好整理一下。 关于图的理论知识2333

Loi_Mapleleaf的小池 726

codevs 1019 集合论与图论

*PS:所以以后加不加特判还是要相信自己的直觉??我就知道(눈‸눈)。。。 题目描述 Description集合论与图论对于小松来说是比数字逻辑轻松,比数据结构难的一门专业必修课。虽然小松在高中的时候已经自学过了离散数学中的图论,组合,群论等知识。但对于集合论,小松还是比较陌生的。集合论的好多东西也涉及到了图论的知识。在第四讲的学习中,小松学到了“有序对”这么一个概念

Loi_Mapleleaf的小池 701

codevs 1391 伊吹萃香

*ps:老实说我真不想调试这个程序(T ^ T) 话说幻想乡的题都做了好多了,出题人不考虑出个连续的吗??

Loi_Mapleleaf的小池 581
上一篇: <学习笔记>关于图的理论知识
下一篇: <队内胡策> 2017.10.10 (贪心+二分答案+DP)
Loi_Mapleleaf
博客等级 码龄10年 17粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值