【ZCMU1895】Landlocked(最短路)

ZCMU 1398 工程 (最短路径算法:弗洛伊德算法和迪杰斯特拉算法)入门题 1398: 工程 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 205  Solved: 111 [Submit][Status][Web Board] Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离... 阅读详情

记录一个菜逼的成长。。

题目链接

题目大意:
给你n*m的矩阵
‘W’表示水,其他表示国家
问这些国家最少需要走多少步,才能到达边界与水相邻的国家

国家这么多,水就一种,我们不妨反着求。
求从水到这些国家的最短路
这里就有两种算法
一种就是spfa算法
测试了无优化,SLF优化,SLF+LLL优化
实际上这里还是SLF优化快

#include <bits/stdc++.h>
using namespace std;
#define ALL(v) (v).begin(),(v).end()
#define cl(a,b) memset(a,b,sizeof(a))
#define clr clear()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef long long LL;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int maxn = 1000 + 10;
char str[maxn][maxn];
int vis[maxn][maxn],dis[maxn][maxn],n,m;
int ans[30];
int dx[] = {-1,-1,0,1,1,1,0,-1},dy[] = {0,1,1,1,0,-1,-1,-1};
deque<PII>q;
void spfa()
{
    while(!q.empty()){
        PII f = q.front();q.pop_front();
        vis[f.fi][f.se] = 0;
        for( int i = 0; i < 8; i++ ){
            int nx = f.fi + dx[i],ny = f.se + dy[i];
            if(nx < 1 || nx > n || ny < 1 || ny > m)continue;
            int w = (str[nx][ny] != str[f.fi][f.se]);
            if(dis[nx][ny] > dis[f.fi][f.se] + w){
                dis[nx][ny] = dis[f.fi][f.se] + w;
                if(!vis[nx][ny]){
                    vis[nx][ny] = 1;
                    ///SLF优化
                    if(dis[nx][ny] < dis[q.front().fi][q.front().se]){
                        q.push_front(mp(nx,ny));
                    }
                    else {
                        q.push_back(mp(nx,ny));
                    }
                }
            }
        }
    }
}
void init()
{
    cl(dis,INF);
    cl(vis,0);
    cl(ans,INF);
}
int main()
{
    while(~scanf("%d%d",&n,&m)){
        init();
        for( int i = 1; i <= n; i++ ){
            scanf("%s",str[i]+1);
            for( int j = 1; j <= m; j++ ){
                if(str[i][j] == 'W'){
                    if(!vis[i][j]){
                        vis[i][j] = 1;
                        dis[i][j] = 0;
                        q.push_back(mp(i,j));
                    }
                }
            }
        }
        spfa();
        for( int i = 1; i <= n; i++ ){
            for( int j = 1; j <= m; j++ ){
                if(str[i][j] != 'W'){
                    ans[str[i][j]-'A'] = min(ans[str[i][j]-'A'] , dis[i][j]);
                }
            }
        }
        for( int i = 0; i < 26; i++ ){
            if(ans[i] != INF){
                printf("%c %d\n",i+'A',ans[i]-1);
            }
        }
    }
    return 0;
}

另一种是堆优化的dijkstra算法
优先队列的比较结构定义

/// One of the @link comparison_functors comparison functors@endlink.
  template<typename _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
      bool operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };

 /// One of the @link comparison_functors comparison functors@endlink.
  template<typename _Tp>
    struct less : public binary_function<_Tp, _Tp, bool>
    {
      bool operator()(const _Tp& __x, const _Tp& __y) const
      { return __x < __y; }
    };
#include <bits/stdc++.h>
using namespace std;
#define ALL(v) (v).begin(),(v).end()
#define cl(a,b) memset(a,b,sizeof(a))
#define clr clear()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef long long LL;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int maxn = 1000 + 10;
char str[maxn][maxn];
int vis[maxn][maxn],dis[maxn][maxn],n,m;
int ans[30];
int dx[] = {-1,-1,0,1,1,1,0,-1},dy[] = {0,1,1,1,0,-1,-1,-1};
struct Node{
    int dis,x,y;
    Node(){}
    Node(int d,int xx,int yy):dis(d),x(xx),y(yy){}
    //小顶堆
    friend bool operator > (const Node& a,const Node& b){
        return a.dis > b.dis; 
    } 
    //大顶堆
    friend bool operator < (const Node& a,const Node& b){
        return a.dis < b.dis; 
    } 
};
struct cmp{
    bool operator()(const Node &a,const Node &b)const{
        return a.dis > b.dis;//小顶堆,, 改成<是大顶堆 
    }
};
//优先队列这里有两种定义优先级的方法
priority_queue<Node,vector<Node>,greater<Node> >q;//如果是重载运算符就用这种形式
//priority_queue<Node,vector<Node>,cmp>q;//如果是定义结构,用这种形式
void dijkstra()
{
    while(!q.empty()){
        Node f = q.top();q.pop();
        vis[f.x][f.y] = 0;
        for( int i = 0; i < 8; i++ ){
            int nx = f.x + dx[i],ny = f.y + dy[i];
            if(nx < 1 || nx > n || ny < 1 || ny > m)continue;
            int w = (str[nx][ny] != str[f.x][f.y]);
            if(dis[nx][ny] > dis[f.x][f.y] + w){
                dis[nx][ny] = dis[f.x][f.y] + w;
                if(!vis[nx][ny]){
                    vis[nx][ny] = 1;
                    q.push(Node(dis[nx][ny],nx,ny));
                }
            }
        }
    }
}
void init()
{
    cl(dis,INF);
    cl(vis,0);
    cl(ans,INF);
}
int main()
{
    while(~scanf("%d%d",&n,&m)){
        init();
        for( int i = 1; i <= n; i++ ){
            scanf("%s",str[i]+1);
            for( int j = 1; j <= m; j++ ){
                if(str[i][j] == 'W'){
                    if(!vis[i][j]){
                        vis[i][j] = 1;
                        dis[i][j] = 0;
                        q.push(Node(0,i,j));
                    }
                }
            }
        }
        dijkstra();
        for( int i = 1; i <= n; i++ ){
            for( int j = 1; j <= m; j++ ){
                if(str[i][j] != 'W'){
                    ans[str[i][j]-'A'] = min(ans[str[i][j]-'A'] , dis[i][j]);
                }
            }
        }
        for( int i = 0; i < 26; i++ ){
            if(ans[i] != INF){
                printf("%c %d\n",i+'A',ans[i]-1);
            }
        }
    }
    return 0;
}
vivado中出现ERROR: [Labtools 27-2220]检测不出开发板 这个错误可能是由于 Vivado 工具中的 cs_server.exe 文件没有正确安装或者文件路径不正确导致的。你可以尝试以下步骤来。时间: 2023-08-16 12:05:50 浏览: 767。希望以上方法能够帮助你。 阅读详情

相关推荐

前沿数据解析 | 麻省理工-斯坦福-丰田研究中心电池数据集:AI驱动下的电池寿命早期预测

本文解析了麻省理工、斯坦福与丰田研究中心联合发布的电池数据集,展示了AI驱动下的电池寿命早期预测技术。通过分析124个商用锂离子电池的完整生命周期数据,研究团队仅用前100次循环数据即可准确预测电池报废时间,为电动汽车电池管理提供革命性解决方案。数据集包含LFP/石墨体系电池的详细测试记录,结合差分容量分析和梯度提升树模型,预测精度显著提升。

weixin_26950847的博客 530

zcmu-1624: 最短路【模板-最短路径】

1624: 最短路 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 279  Solved: 70 [Submit][Status][Web Board] Description 有n个城市编号为1—n,m条路,告诉你每条路的长度,求给定两点的最短路径长度。   Input T 组数据 每组数据第一行有两个正整数n,m(n&lt;=10...

Imagirl1的博客 431

代码复现——SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架

根据《SymAgent: A Neural-Symbolic Self-Learning Agent Framework for Complex Reasoning over Knowledge Graphs》(《SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架》)论文思路,简单复现代码,以实现SymAgent中的Agent-Planner和Agent-Executor模块。Agent-Planner利用大语言模型的归纳推理能力从知识图谱中提取符号规则,指导高效的问题分解。

qq_60040306的博客 1606

1624-最短路(单源最短路径) ZCMU

Description  有n个城市编号为1—n,m条路,告诉你每条路的长度,求给定两点的最短路径长度。 Input  T 组数据  每组数据第一行有两个正整数n,m(n&lt;=1000,m&lt;=10000)分别表示城市的数量和路的条数,接下来m行,每行3个整数a,b,c,表示城市a和城市b之间有一条c长度的路  最后一行输入两个整数x,y。 Output 输出城市 x 到城市...

CHL的博客 466

基于微信小程序的智能门禁管理系统的设计与实现(文章+源码)

基于微信小程序门禁管理小程序,该系统支持用户注册登录、查阅新闻动态、提交开门申请和发布留言等功能,同时管理员可以进行用户管理、新闻信息管理、门禁审批管理和留言管理等操作。该系统将采用IDEA开发工具、SSM框架和MYSQL数据库等相关技术,实现用户登录注册、个人信息管理、门禁申请提交、管理员审核等功能。该系统的实现,可以有效提高门禁管理的效率和便利性,同时也具有较强的可扩展性和可维护性。本研究对于智能门禁管理系统的设计和实现具有一定的参考价值。

u011779145的博客 1400

android OTA升级之后,apk崩溃无法启动

也就是说,我们这个高低版本是fingerprint相同的情况,这个问题追述到jenkins编译,启动job时会初始化一个BUILD_NUMBER值,这个值正好跟Android的build系统的名称重复,这就导致Android build系统那一套拼接时间戳的值不会走,因为jenkins一启动就会定义该值,而我们jenkins服务器迁移过,这个值又会从1开始累计,导致前后版本都是16,从而导致fingerprint一致。问题背景:系统版本从低版本升级到高版本后,apk崩溃启动失败。硬件平台:QCS6125。

kevin's cache的专栏 1347

Codevs 无限网络发射器选址

随着智能手机的日益普及,人们对无线网的需求日益增大。某城市决定对城市内的公共场所覆盖无线网。假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值1。东西向街道从北到南依次编号为0,1,2…128,南北向街道从西到东依次编号为0,1,2…128。东西向街道和南北向街道相交形成路口,规定编号为x的南北向街道和编号为y的

LOI__DiJiang的博客 758

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

zcmu 1200 小明的难题(最短路)

【题目】 1200: 小明的难题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 334  Solved: 89 [Submit][Status][Web Board] Description 这是一个小明认为很难的问题,快到五一长假了,小明突然想去旅游,但是他有一些想去的地方,他搜集了他想去的地方的路线信息,但是他搜集的信息太多了,因此他决...

菜鸡成长史 621

Jetson Thor平台JP7.0版本96712 GMSL相机驱动调试记录

摘要:本文档记录了在Thor Custom Board (JP7.0GA)上配置GMSL摄像头时遇到的视频流问题及调试过程。问题表现为视频设备(/dev/video11)能正常创建,但获取视频时出现"Internal data stream error",而相同配置在AGX Orin JP6.0上运行正常。通过梳理硬件拓扑、v4l2-ctl测试、提升时钟频率及分析内核日志,发现VI引擎未接收到帧数据包。调试步骤包括检查设备树冲突、调整I2C总线配置、修正通道名称,最终通过屏蔽传感器启动时

jzwjzw19900922的博客 1111

EAAI title-page-template 怎么填写: 期刊投稿作者信息填写指南

本文详细介绍了期刊投稿时作者信息填写的规范要求。主要内容包括:1)核心填写原则(信息一致性、标注清晰性、通讯作者唯一性);2)具体填写方法演示(作者姓名、单位/机构、通讯作者);3)常见错误规避指南(如单位上标错误、邮箱无效等);4)提供可直接套用的规范模板。特别强调作者姓名拼写、单位标注、通讯作者指定等关键细节,并以深圳大学和同济大学研究团队为例进行说明,帮助投稿者避免因格式问题被退回修改。

ZhangJiqun&191cm&85kg 1087

SPFA的两种优化SLF和LLL

记下SPFA的两种优化,大牛请无视SPFA算法有两个优化算法 SLF 和 LLL: SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j) < dist(i),则将j插入队首,否则插入队尾。 LLL:Large Label Last 策略,设队首元素为i,每次弹出时进行判断,队列中所有dist值的平均值为x,若dist(i

No Program No Life 1万+

YOLOv9分割训练自己数据和推理训练好模型,并教你使用Labelme工具标注数据(附YOLOv9分割模型结构图),全网最详细教程

YOLOv9 通过研究数据传输时的信息丢失问题,提出了可编程梯度信息(PGI)和通用高效层聚合网络(GELAN)架构,提高了参数利用率和模型性能。与 SOTA 方法相比,GELAN 仅使用传统卷积算子即可实现更好的参数利用率。PGI 适用于从轻型到大型的各种模型,使从头开始训练的模型能够获得更好的结果。YOLOv9 被评价为新的 SOTA 实时目标检测器。接下来本文手把手教你训练自己分割数据集和推理训练好的分割模型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1493

【HDU6031】Innumerable Ancestors(二分+LCA)

题目链接题目大意: 给你n个点树,m个查询 每次查询给出两个点集A,B。 求x∈A,y∈Bx\in A,y\in B 使得lca(x,y)的深度最大lca(x,y)的深度最大倍增lca相关知识 用倍增法处理出lca 然后对每个查询二分深度 处理出A集合的点在二分深度的祖先集合 然后判断B集合里是否存在一个点的祖先在上述集合里#include <bits/stdc

No Program No Life 1150

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

【POJ2762】Going from u to v or from v to u?(tarjan+缩点+拓扑排序)

题目链接 题目大意: 判断给你的有向图是否为单向连通图用tarjan算法求出强连通分量,以强连通分量为顶点建新图(tarjan算法O(n+m)) 如果一个DAG是单向连通图当且仅当它的拓扑序唯一 也就是说拓扑排序时队列中的元素不能大于1虽然这题点数较小,可以用矩阵,但是前向星可以适应更大的点数#include <cstdio> #include <queue> #in

No Program No Life 1002

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【loj】#6005. 「网络流 24 题」最长递增子序列(dp+最大流)

给定正整数序列 x1∼xn ,以下递增子序列均为非严格递增。 计算其最长递增子序列的长度 s。 计算从给定的序列中最多可取出多少个长度为 s 的递增子序列。 如果允许在取出的序列中多次使用 x1 和 xn ,则从给定序列中最多可取出多少个长度为 s 的递增子序列。

No Program No Life 763

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

团体程序设计天梯赛-练习集-L3-011. 直捣黄龙(最短路+计数)

题目链接 最快路径其实就是最短路径。以下数组都在满足最短路条件下 num[i] := 表示到达i点的最短路径数 len[i] := 表示到达i点所经过的点数,不包括起点 tot[i] := 表示到达i点所救的人数#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #

No Program No Life 727

团体程序设计天梯赛-练习集-L3-005. 垃圾箱分布(最短路dijkstra)

题目链接对每一个垃圾桶都用一遍dijkstra,然后把相应的数据存入结构体排下序,再输出就可以了 如果有一个居民点和垃圾桶间没有路径,这肯定是不行的。#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define cl(a,b

No Program No Life 723

【loj】#6007. 「网络流 24 题」方格取数(二分图最大点权独立集)

在一个有 m×n 个方格的棋盘中,每个方格中有一个正整数。 现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。

No Program No Life 674

【loj】#6011. 「网络流 24 题」运输问题(最小费用流)

W 公司有 m 个仓库和 n 个零售商店。第 i 个仓库有 ai 个单位的货物;第 j 个零售商店需要 bj 个单位的货物。货物供需平衡,

No Program No Life 593

【HDU1269】迷宫城堡(tarjan)

题目链接 题目大意: 判断给你的图是否为强连通图tarjan算法套下就好了 判断强连通分量的数量是否为1#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) const int maxn = 100000 + 10; int head[maxn],cnt;

No Program No Life 556

【loj】#6001. 「网络流 24 题」太空飞行计划(最大权闭合子图)

题目链接 hihocoderused数组中保存的就是最小割点集 ans=∑正权值−最小割容量ans = \sum 正权值 - 最小割容量#include <bits/stdc++.h> using namespace std; #define ALL(v) (v).begin(),(v).end() #define cl(a,b) memset(a,b,sizeof(a)

No Program No Life 507

之江学院第0届校赛-H.qwb与学姐(最大生成树+lca)

题目链接一开始看到这题,想的是最大生成树+树链剖分+线段树。时间复杂度大概是O(mlogm+n+nlogn+klogn)O(mlogm+n+nlogn+klogn) 然而貌似是因为线段树的常数大然后炸了。。(不会zkw线段树,待学。orz然后题解说的是最大生成树+倍增法lca 就是创建一个数组 dis[i][j]:=表示i点跟它的第2j个祖先之间路径的最小值dis[i]

No Program No Life 499

团体程序设计天梯赛-练习集-L3-007. 天梯地图(最短路)

题目链接 这题跟pat(A)1111很像。。 只是在求最短路和最快的路的次要条件不一样并且输出格式颠倒一下。 之前写过pat(A)1111的代码 就稍微改下。#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; #define

No Program No Life 498

【loj】#6009. 「网络流 24 题」软件补丁(状态压缩+最短路)

某公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共m 个补丁程序。每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才可以使用。一个补丁在排除某些错误的同时,往往会加入另一些错误。 换句话说,对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i) 和 B2(i) ,使得仅当软件包含 B1(i) 中的所有错误,,而不包含 B2(i)

No Program No Life 494

【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)

假设有来自 n个不同单位的代表参加一次国际会议。每个单位的代表数分别为 ri ​​ 。会议餐厅共有 m张餐桌,每张餐桌可容纳 ci个代表就餐。 为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。 试设计一个算法,给出满足要求的代表就餐方案。

No Program No Life 479
上一篇: 【ZCMU1894】Power Eggs(鹰蛋问题dp)
下一篇: SPFA的两种优化SLF和LLL
oranges_c
博客等级 码龄10年 30粉丝 216原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值