Travel Plan

PAT甲级1030 Travel Plan (C++) 题意:这道题和之前1003的城市找路线问题非常相似,几乎是一模一样,给出城市 路数 起点 终点 后面跟着 城市1 城市2 路长 花费 然后求出起点到终点的路径,距离,花费其中有几点就是要注意,现在求得不是路径多少,最短路径的那一条具体路线,如果有多条路线就找花费最少的路线。 题解: 整道题一个用到深搜,一个用到回溯,深搜用来找最短路径,回溯用来找详细路径,难度要比1003的更大一点。 详细代码样例: #include <bits/stdc++.h> using namespace std; // 阅读详情

(1)Dijkstra算法
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXV=510;
const int INF=1000000000;
int n,m,st,ed,G[MAXV][MAXV],cost[MAXV][MAXV];
int d[MAXV],c[MAXV],pre[MAXV];
bool vis[MAXV]={false};
void Dijkstra(int s){
    fill(d,d+MAXV,INF);
    fill(c,c+MAXV,INF);
    for(int i=0;i<n;i++)pre[i]=i;
    d[s]=0;
    c[s]=0;
    for(int i=0;i<n;i++){
        int u=-1,MIN=INF;
        for(int j=0;j<n;j++){
            if(vis[j]==false&&d[j]<MIN){
                u=j;
                MIN=d[j];
            }
        }
        if(u==-1)return;
        vis[u]=true;
        for(int v=0;v<n;v++){
            if(vis[v]==false&&G[u][v]!=INF){
                if(d[u]+G[u][v]<d[v]){
                    d[v]=d[u]+G[u][v];
                    c[v]=c[u]+cost[u][v];
                    pre[v]=u;
                }else if(d[u]+G[u][v]==d[v]){
                    if(c[u]+cost[u][v]<c[v]){
                        c[v]=c[u]+cost[u][v];
                        pre[v]=u;
                    }
                }
            }
        }
    }
}
void DFS(int v){
    if(v==st){
        printf("%d",v);
        return;
    }
    DFS(pre[v]);
    printf("%d",v);
}
int main(){
    scanf("%d%d%d%d",&n,&m,&st,&ed);
    int u,v;
    fill(G[0],G[0]+MAXV*MAXV,INF);
    for(int i=0;i<m;i++){
        scanf("%d%d",&u,&v);
        scanf("%d%d",&G[u][v],&cost[u][v]);
        G[v][u]=G[u][v];
        cost[v][u]=cost[u][v];
    }
    Dijkstra(st);
    DFS(ed);
    printf("%d %d\n",d[ed],c[ed]);
    return 0;
}
(2)Dijkstra+DFS
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int MAXV=510;
const int INF=1000000000;
int n,m,st,ed,G[MAXV][MAXV],cost[MAXV][MAXV];
int d[MAXV],minCost=INF;
bool vis[MAXV]={false};
vector<int>pre[MAXV];
vector<int>tempPath,path;
void Dijkstra(int s){
    fill(d,d+MAXV,INF);
    d[s]=0;
    for(int i=0;i<n;i++){
        int u=-1,MIN=INF;
        for(int j=0;j<n;j++){
            if(vis[j]==false&&d[j]<MIN){
                u=j;
                MIN=d[j];
            }
        }
        if(u==-1)return;
        vis[u]=true;
        for(int v=0;v<n;v++){
            if(vis[v]==false&&G[u][v]!=INF){
                if(d[u]+G[u][v]<d[v]){
                    d[v]=d[u]+G[u][v];
                    pre[v].clear();
                    pre[v].push_back(u);
                }else if(d[u]+G[u][v]==d[v]){
                    pre[v].push_back(u);
                }
            }
        }
    }
}
void DFS(int v){
    if(v==st){
        tempPath.push_back(v);
        int tempCost=0;
        for(int i=tempPath.size()-1;i>0;i--){
            int id=tempPath[i],idNext=tempPath[i-1];
            tempCost+=cost[id][idNext];
        }
        if(tempCost<minCost){
            minCost=tempCost;
            path=tempPath;
        }
        tempPath.pop_back();
        return;
    }
    tempPath.push_back(v);
    for(int i=0;i<pre[v].size();i++){
        DFS(pre[v][i]);
    }
    tempPath.pop_back();
}
int main(){
    scanf("%d%d%d%d",&n,&m,&st,&ed);
    int u,v;
    fill(G[0],G[0]+MAXV*MAXV,INF);
    fill(cost[0],cost[0]+MAXV*MAXV,INF);
    for(int i=0;i<m;i++){
        scanf("%d%d",&u,&v);
        scanf("%d%d",&G[u][v],&cost[u][v]);
        G[v][u]=G[u][v];
        cost[v][u]=cost[u][v];
    }
    Dijkstra(st);
    DFS(ed);
    for(int i=path.size()-1;i>=0;i--){
        printf("%d",path[i]);
    }
    printf("%d %d\n",d[ed],minCost);
    return 0;
}

警惕!数字签名伪造的攻防演练:用SigThief克隆证书的真实测试(Windows环境) 本文深入探讨了Windows环境下数字签名伪造的攻防技术,详细介绍了使用SigThief工具进行签名提取与克隆的实战步骤。通过真实测试案例,揭示了数字签名安全机制的潜在漏洞,并提供了有效的防御策略和检测技术,帮助安全人员提升系统防护能力。 阅读详情

相关推荐

人工智能训练师技能等级认定四级技能考核试卷-样题1

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总分100分,考试时间150分钟。试卷涵盖数据处理、模型训练准备及系统维护等核心技能:1)垃圾分类数据集规范与处理(30分),要求评估数据格式并编写Python处理代码;2)学生成绩数据集分析(20分),涉及数据预处理、可视化及相关性分析;3)数据标注审核(10分),重点审核标注准确性;4)智能数据服务系统维护与优化(40分),包括安全帽数据集的项目创建、数据处理及平台协作。考核强调Python编程、数据处理平台操作及AI工作流程的实践能力。

weixin_42221934的博客 437

1030 Travel Plan (30分) 找最短路径 DFS

1030 Travel Plan (30分) A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting city and

weixin_45331809的博客 195

VESC电调高级调参指南:电机校准与性能优化实战解析

本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。

weixin_30772105的博客 196

1030 Travel Plan C++

#include <stdio.h> #include <algorithm> #include <queue> using namespace std; const int MAXV = 510; int Distance[MAXV][MAXV], Cost[MAXV][MAXV]; int N, S, D, INF = 0x3fffffff, cost[MAXV], d[MAXV]; int pre[MAXV]; queue<int> q; bool

CyIce的博客 302

FPGA时序约束:从时钟树到数据路径的深度解析与优化策略

本文深入解析FPGA时序约束的核心技术与优化策略,涵盖时钟树结构分析、时序报告解读和数据路径优化。重点探讨Vivado工具中的时序约束方法,包括时钟定义、异常约束和物理优化,帮助工程师掌握寄存器级时序分析和系统级协同设计,实现高性能FPGA设计。

u5v6w7的博客 652

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

1030 Travel Plan

【代码】1030 Travel Plan。

CY_hhxx的博客 144

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 389

PAT甲级-1030 Travel Plan

迪杰斯特拉求最短路径,递归回溯path数组 C++

weixin_74092648的博客 375

汽车OBD接口实战:如何用STM32读取CAN总线数据(附完整代码)

本文详细介绍了如何利用STM32微控制器通过汽车OBD接口读取CAN总线数据的完整实战方案。内容涵盖硬件连接(如OBD引脚定义与TJA1050收发器接线)、STM32的CAN外设初始化与滤波器配置,并深入解析OBD-II诊断协议,演示了如何请求和解析发动机转速、车速等关键数据。文末提供了构建稳定数据读取系统的代码框架与错误处理建议,为嵌入式开发者和汽车电子爱好者提供了从零到一的实践指南。

9q8w7e6r5的博客 295

库卡kuka仿真软件sim Pro 3.1简单实用教程

实验目的 建立机器人,自定义抓手,导入外部模型,掌握工具坐标、基坐标的使用,自动生成轨迹。 实验步骤 打开KUKA.Sim Pro 3.1.2仿真软件,依次点击KUKA Sim Library 3.1 → KUKA_ROBOTS→Small Robots(3kg-10kg)→Archiv→AGILUS-1 Series→sixx,双击KR 6 R700 sixx,加载机器臂到工作空间; 加载自定义抓手。双击Miscellaneous,再双击圆锥Cone设置上半径为0,下半径为40,高为100; 点击“捕

weixin_45168199的博客 4万+

【PAT甲级】1030 Travel Plan

题目链接:1030Travel Plan 发文里跳了好几道题目,都是因为不明原因无法AC的,十分惆怅。。。 #include <iostream> #include <vector> #include <stack> using namespace std; int main(){ int n, m, s, d; cin >> n >> m >> s >> d; vector<...

五百零一 194

紫光展锐面试——FPGA/IC设计面试面经案例总结

自我介绍;研究生的主要研究方向是什么?为什么想要应聘数字芯片相关的工作?简单介绍下数字IC设计流程。逻辑综合主要做什么?你有实际做过逻辑综合工作吗?你了解SS corner和FF corner吗?综合时应该使用哪个corner?综合时需要考虑hold吗?为什么?提高时钟频率对setup和hold有什么影响?为什么?hvt、rvt/svt、lvt有什么区别?c40、c50是指什么概念?有什么区别?你对EDA工具有过了解吗?

FPGA/MATLAB学习教程/源码/项目合作开发 1561

【PAT 甲级】1030 Travel Plan

堆优化的Dijkstra算法

AmiaYukiAchami的博客 769

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

PAT A 1030 Travel Plan

摘要:题目要求为旅行者寻找起点到终点的最短路径,若路径不唯一则选择花费最低的。使用Dijkstra算法,在计算最短距离的同时维护最小花费。代码实现中,通过邻接矩阵存储城市间距离和花费,使用优先队列优化路径选择,并记录前驱节点以输出完整路径。输入样例为4个城市和5条高速公路,输出为最短路径0→2→3,总距离3,总花费40。

whdehcy的博客 515

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

1030 Travel Plan

1030Travel Plan(30分) A traveler's map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to d...

yu121380的博客 281

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PAT A1030 Travel Plan (30分)

PAT A1030 Travel Plan (30分) 题目 原题链接 题目大意 给出城市之间的连接关系,并给出每条边的权重,计算输出从起点到终点最短路径与最少消费 大体思路 本题是典型的dijkstra+DFS模板题目,掌握了该模板此题没有什么难度 代码 #include<stdio.h> #include<algorithm> #include<vector&gt...

qq_41706836的博客 215

PAT 1030 Travel Plan

题目描述   A traveler’s map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest...

学习记录 478
上一篇: vscode编写HTML-css-JavaScript等代码时输入一个字符就自动换行的bug详细解决方案
下一篇: Battle over cities
超翔之逸
博客等级 码龄6年 4808粉丝 415原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超翔之逸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值