Kattis - oceancurrents优先队列+bfs

最短路问题(各种方法整理)附上一个完美模板 最短路问题(short-path problem),从某点出发到达另一点所经过的路径权值相加最小的一条路径,就是最短路径。 经典的也是最容易掌握的方法Floyd,Dijkstra两种算法。 1.Floyd算法 Floyd算法可以求解的是任意两点的最短路径,功能强大,因此复杂度也很高,但是非常的好懂。 思想很简单,两点的最短路径无非就是直接从一点到另一点,要么就是中间还存在着其他的点。因此只 阅读详情

题目大意是,给定整个图中各个点的流向,在这个点上顺着流向前进是不需要消耗体力的,但是往其他方向走是需要消耗体力的.给定终点起点,求从起点到终点,最小消耗的体力是多少

当时看到这个问题之后第一反应是搜索,但是1000*1000个格子,直接去搜索显然是要爆炸的.

赛后发现其实可以用优先队列搜索,或者是A*搜索

这里给出优先队列搜索的方法,A*搜索等自己补上这个知识点之后再说

优先队列搜索大致如下,每次从队列中找到一个耗费最小的节点,然后放入对应的这个节点的下一步的八个方向的节点到优先队列中,然后即可保证第一次出现的到达终点的耗费就是最小耗费.

其实先前有一年的浙江省省赛金牌题也是这个,题面是熊猫烧香病毒的传染.有兴趣的可以看看

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f3f
struct node
{
    int x,y,cost;
    bool operator < (const node &a) const
    {
        return cost>a.cost;//最小值优先
    }
};
priority_queue<node>q;
char mp[1005][1005];
int a[1005][1005],vis[1005][1005];
int n,m;
int stx,sty,edx,edy;
int t,ans;

int dx[] = {-1,-1,0, 1,1, 1, 0 ,-1};
int dy[] = { 0,1,1, 1,0,-1,-1 ,-1};
//7 0 1
// \|/
//6-*-2
// /|\
//5 4 3
void bfs()
{
    while(!q.empty())q.pop();
    memset(vis,0,sizeof(vis));
    ans=0;

    node add,temp;
    add.cost=0;
    add.x=stx;
    add.y=sty;
    q.push(add);
    while(!q.empty()){
        temp = q.top();
       // cout<<temp.x<<" "<<temp.y<<endl;
        //cout<<edx<<edy<<endl;
        if(temp.x==edx&&temp.y==edy){
            ans=temp.cost;
            break;
        }
        vis[temp.x][temp.y]=1;//出队列标记

        for(int i=0;i<8;i++){
            int nowx,nowy;
            nowx = temp.x+dx[i];
            nowy = temp.y+dy[i];
            //cout<<nowx<<" "<<nowy<<endl;
            if(nowx<=n&&nowx>=1&&nowy<=m&&nowy>=1&&vis[nowx][nowy]==0){
                add.x=nowx;
                add.y=nowy;
                add.cost=temp.cost+1;
                if(i==a[temp.x][temp.y])
                    add.cost--;
                q.push(add);
            }
        }
        q.pop();
    }
}

int main()
{
   // freopen("1.txt","r",stdin);
    std::ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            cin>>mp[i][j];
            a[i][j]=mp[i][j]-'0';
        }
    cin>>t;
    while(t--)
    {
        cin>>stx>>sty>>edx>>edy;
        bfs();
        cout<<ans<<endl;
    }
    return 0;
}


智慧楼宇解决方案-全套大合集 智慧楼宇解决方案,楼宇能耗-环境-设备统一管控解决方案。 阅读详情

相关推荐

以LAN8720A为例的以太网硬件设计方案

输入时钟(XTAL1/CLKIN,XTAL2):推荐外加25MHz(性价比较高)晶振为PHY芯片提供时钟,PHY芯片内部PLL将其倍频为50MHz来使用,亦可使用直接使用50MHz晶振。三位MODE通过高低电平组合分别对应以上8种模式 ,包含10M半双工,10M全双工,100M半双工,100M全双工,是否启用自协商协议,CRS是否有效等。VDDCR:1.2V电源,可由芯片内部稳压电源提供,亦可由外部电源提供,由外部电源提供可降低芯片功耗。REF_CLK:参考时钟,由MAC或外部时钟晶振向PHY芯片提供。

weixin_46154042的博客 5883

HDU - 2757 Ocean Currents (BFS+优先队列)

题意:求从开始点到目标点的最小的能量消耗,如果下一格的风向和当前的一样的话,消耗为0,否则为1,一共8个方向,其实方向是0 思路:BFS的基础上还要加上优先队列来取能量的最小值 #include #include #include #include #include using namespace std; const int MAXN = 1010; const int INF =

那些年 1061

微纳加工技术中的自对准硅化物(Silicide)工艺:关键步骤与应用场景解析

本文深入解析了微纳加工技术中的自对准硅化物(Silicide)工艺,详细介绍了其关键步骤与应用场景。从表面清洁、金属沉积到两步退火法,全面拆解工艺全流程,并探讨了不同技术节点下的工艺演进。文章还提供了实际应用中的问题排查方法和新兴技术对Silicide工艺的挑战,为芯片制造领域的工程师提供了实用参考。

weixin_30613727的博客 429

UVA 11573 - Ocean Currents(BFS+优先队列)

UVA 11573 - Ocean Currents 题目链接 题意:给定一个海面,数字分别代表海流方向,顺着海流不用费能量,逆海流要费1点能量,每次询问给一个起点一个终点,问起点到终点耗费的最小能量 思路:广搜,队列用优先队列,每次取能量最低的点出来进行状态的转移 代码: #include #include #include using namespace s

Remilia's 1524

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2031

SEW MDX61B 变频器调试说明

可手动自由更改时间和地址,时间一般不更改,IP地址使用网络适配器地址(Network adapter),点击进入即可。进入网络适配器(Network adapter)后,选择适配器建议地址,点击OK,更改IP地址后点击OK。点击加载配置文件(Load a configuration),加载已保存的应用模块配置文件, 或者点击“next”,开始重新配置AMA0801模块。满足安全回路后,控制模式选为寻参模式(Reference mode),选中开始(start),即可将机械零点设置为电气零点。

xdpcxq的专栏 4299

Ocean Currents

For a boat on a large body of water, strong currents can be dangerous, but with careful planning, theycan be harnessed to help the boat reach its destination. Your job is to help in that planning. At each location, the current flows in some direction. The

水蛙菌 2465

Isaac Sim/Lab & ROS2 入门教程 —— 宇树人形机器人 H1 强化学习策略部署

本文介绍了如何通过ROS2和IsaacSim运行H1人形机器人的强化学习运动策略。主要内容包括:1)设置机器人关节配置和初始位置;2)添加IMU传感器;3)配置ROS2节点以发布观测数据和接收动作指令;4)创建模拟环境并发布ROS时钟;5)最终运行ROS2策略实现对机器人的键盘控制。文中详细说明了关节参数设置、传感器配置、ROS2节点创建等关键步骤,并提供了注意事项和验证方法。完成配置后,用户可通过键盘指令控制机器人在平坦地形上的运动。

2506_90492529的博客 2169

01背包,完全背包,多重背包的个人总结

大一刚接触背包问题的时候就觉得绕。那时候真的是一点代码基础都没有强行去理解。每次都是以失败告终,一直到大二都还不会写背包问题。 后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准备搞一搞这个东西了。 有了一定的基础理解起来就比以前容易多了。 首先,先分清楚这三个背包问题。 1.01背包:有n种物品与承重为m的背包。每种物品只有一件,每个物品都有对应的重量weight[

Linnnnnger的博客 1万+

YOLOv11改进 | Conv改进篇 | 含2种改进,引入DynamicConv替换普通Conv卷积下采样和C3k2_DynamicConv替换C3k2(来自CVPR2024)

本文提出了一种基于DynamicConv动态卷积优化的YOLOv11轻量化模型改进方案。通过引入多专家机制的动态卷积模块,在增加模型参数量的同时保持较低的计算复杂度(FLOPs),有效解决了低FLOPs模型在大规模预训练中的性能瓶颈问题。文章详细介绍了动态卷积的工作原理、核心代码实现,并提供了在YOLOv11中集成DynamicConv和C3k2_GhostModule_DynamicConv模块的完整教程,包括模块添加、配置文件修改和模型训练验证过程。实验结果表明,该方案在保持高效推理速度的同时显著提升了

Ai缝合怪、助力小伙伴高效发论文 536

MIPI D-PHY TX 一致性测试实例解析 Part 03

本文之前,已经讨论了MIPI D-PHY TX的1.3.x和1.4.x的测试项,1.5.x的测试项相对较少,主要是用于时钟和数据通道相关的时序测量

一只豌豆象的博客 5184

列车调度(PAT)

当时想了很久,总是超时。最后参考了别人的代码才完全A了。 PAT题目总是这样,用一些很巧妙的容器跟函数。 然后大大简化代码量。 #include using namespace std; sets; int n,x; int main() { cin>>n; s.insert(0); for(int i=0;i<n;i++){ cin>>x;

Linnnnnger的博客 1502

Python在Genesis2000 CAM软件中的编程应用

Genesis2000是一款功能强大的计算机辅助制造(CAM)软件,它提供了广泛的功能和工具,用于帮助制造商进行CAD(计算机辅助设计)到CAM的转换。在Genesis2000中,我们可以利用Python的灵活性和功能来扩展软件的自定义能力,并通过编写脚本来自动化各种制造任务。例如,假设我们需要在Genesis2000中添加一个新的操作,用于自动计算零部件的重量。我们可以编写一个Python脚本,通过遍历模型的几何数据并应用相关的计算公式,来实现这个功能。

PixelEnigma的博客 2423

最小生成树的两种方法

最小生成树问题的讲道理都是很直观的,让人一眼看得穿,然后再在模版上稍加改动就完成了。一般来说Prim跟Kruskal方法都是能解题的。但是复杂度不一样。Prim的时间复杂度是O(n^2),而Kruskal方法与给出的边的数量有关,复杂度为O(eloge)其实时间都是花在排序上了 。1.Prim算法简单来说,就是从一个点开始不断寻找,链接着其他相关点,每次加入一个距离最小的点。其中low数组就是保存...

Linnnnnger的博客 1379

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...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

牛客网——正则表达式匹配

给出匹配串,给出模式串。给出两种正则运算,一个是.(点)表示占位代表任意一个字符,一个是字符*(例如a*)代表此处可以有任意个*前面的字符。一开始想着是正着慢慢模拟,但是显然不可行,正着做显然是直接使用了前面的字符,而每次特殊判断字符后是不是*号过于复杂。第二个想着是倒着匹配,碰到*号了往新串中添加字符,然后观察时候可以构造出一个与原串相同的字符,但是也失败了,因为无法控制个数,例如abaaaa,...

Linnnnnger的博客 1081

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RSA的简单模拟实现

对称加密都非常好理解,而且十分容易实现。 其实小的时候就早早知道了非对称加密的概念。但是就算在现实中找到海枯石烂也找到不到一个实例去实现。 然后上课老师举了一个很形象的例子: 非对称加密就像一个邮箱。邮箱的外壳就是加密秘钥,而邮箱的钥匙是解密秘钥。大家都可以使用这个加密秘钥把自己的信息发送出去而其他人也是同样的手法加密信息。但是过程是不可逆的,只有拥有解密秘钥的人,也就是拥有邮箱钥匙的人才能

Linnnnnger的博客 1048

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

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

gcd以及多数gcd

以前曾经因为多数gcd被坑了好几次。终于冷静下来找时间把这个坑给填了。 然而只是一些思维上简单的思考而已。 没什么多说的。直接上代码 1.给出一个最简单的gcd写法。 2.多个数的gcd其实也很简单,最重要的是后续求值的时候是否除掉了先前的gcd,下边的写法乘,除,再乘是为了防止溢出。 #include #include #include #include using namespa

Linnnnnger的博客 1017

The 7th Zhejiang Provincial Collegiate Programming Contest

A - Who is Older? #include #include #include #include #include #include #include #include #include #include #define mod 1e9+7 #define ll long long #define MAXSIZE 100005 #define inf 0x3f3f3f3f #defin

Linnnnnger的博客 963

Consecutive Blocks (ZOJ3970)

给出n个带着颜色的方块,然后最多去掉k块,求最长的连续颜色段。 如1122322,去掉3则最长是4,另外113311去掉33最长则是4。 思路是先把所有的颜色排到一起,再去一次遍历得到符合条件的(去掉小于等于k块)最大连续段。 难点: 1.关于把所有的颜色放到一起,可以开许多个vector把相同的颜色放到同一个vector,也可以自己写cmp排在一起,操作起来大同小异。 2.关于怎么

Linnnnnger的博客 931

Kattis-torn to pieces

题目大意:第一行给出n代表有n张地图碎片,接下来n行给出碎片上的信息,第一个单词代表这个碎片上的节点,后边所有的节点都与第一个节点相连接. 最后一行给出查询,问从A到B是否存在一条路径可以通过给定的拼图的一部分拼凑而成,可行的话输出路径,否则输出no route find 可能是比赛当时受了先前题目的影响,看到这题之后第一时间想到的就是最短路,题目保证了最多只有一条路.因此,只需要把每个节点名

Linnnnnger的博客 883

codeforces520B-Two Buttons

题目已经写过很多次了,但是还是写错.记下来引以为戒. 题目大意,给定两个数a,b,通过两种操作将a变成b 一种是将a乘以2,一种是将a减1 这里可以用贪心的思路做,强行bfs搜也是可以,但是数据一大就容易T 首先如果a>b那么必然是直接减,因为变小的操作只有减 如果a 如果是偶数,那么必然最后一步是乘以2也可以还原,把b变成b/2 直到操作到b 思考的方式其实是倒着做,并不是用a去

Linnnnnger的博客 872

The 11th Zhejiang Provincial Collegiate Programming Contest

A - Pokemon Master 题目大意:比重量 代码: #include #include #include #include #include #include #include #include #include #include #include #define mod 1e9+7 #define ll long long #define MAXSIZE 100005 int

Linnnnnger的博客 832

UVALive 7427 Elementary Math

题目大意:给定一些数对,用+-*三个运算符号去操作数对,使得每个数对操作之后的结果都不相同。如果存在满足情况的解,则按照原顺序输出,否则输出impossible 一个设计的非常巧妙地二分图!! 数对是一边,匹配的是所有的运算结果,如果存在这样的结果,就把点对和结果连边,得出最大匹配。 特别需要注意的是,结果存储的时候需要三倍空间。 小错误真的可以让人WA到怀疑人生 #include us

Linnnnnger的博客 780

多项式的输出

曾经被这个卡过,顿时心情就不美丽了。因为仔细讨论起来的话情况很多,然后就去百度了代码,发现多项式得输出竟然是一年noip得题目。因此拷贝的代码如下#include using namespace std; int main() { int n; cin>>n; int a[101]={0}; for(int i=n;i>=0;i--)

Linnnnnger的博客 775

红色警报(PAT)

一个并查集的问题。 先把边全部存起来,然后记录节点是否被攻占。然后用这些边,去掉被攻占的节点。重复建图。不断比较。 #include using namespace std; struct node { int w,v; }; node link[5005]; int n,m,k,last,now; int pa[505],live[505]; int findpa(int x) {

Linnnnnger的博客 751

【数据结构】基于比较的排序算法 - 交换排序

本文介绍交换排序中的冒泡排序与快速排序。冒泡排序通过相邻元素比较交换,实现升序,时间复杂度最坏为O(N²),空间复杂度O(1),稳定且适合小规模有序数据。快速排序采用分治思想,以基准值划分区间,平均时间复杂度O(N log N),空间复杂度O(log N),但不稳定,实际应用中性能优异,可通过随机基准、小区间优化等提升效率。

careathers的博客 320
上一篇: 阶乘位数问题
下一篇: Kattis-torn to pieces
Linnnnnger
博客等级 码龄11年 71粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值