1030. Travel Plan (30)

2024-01-08 22:10
文章标签 30 travel plan 1030

本文主要是介绍1030. Travel Plan (30),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IDEA

1.求最短路径,并输出该路径

2.要就在判断过程中若存在相同长度,则选cost小的

3.Dijkstra改进

思想:把图中node分为两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。

步骤

a.初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。
b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。
c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。
d.重复步骤b和c直到所有顶点都包含在S中。



CODE

#include<iostream>
#include<vector> 
#include<stack>
#include<fstream>
using namespace std;
#define Max 500
#define INF 0x6FFFFFFFstruct Edge{int end;int distance;int cost;Edge(int e,int d,int c):end(e),distance(d),cost(c){}
};
struct Node{int distance;int cost;int path;Node():distance(INF),cost(INF),path(-1){}
};
vector< vector<Edge> > map;
vector<Node> city;
int visited[Max]={0};
int n,m,start,dest;
int FindMin(){//选择一个距离最小的点int min=INF;int k=-1;for(int i=0;i<n;i++){if(!visited[i]&&city[i].distance<min){min=city[i].distance;k=i;}}return k;
}
void Dijkstra(int start,int dest){city.clear();city.resize(n);city[start].distance=0;city[start].cost=0;while(1){int p=FindMin();//cout<<p<<endl;if(p==-1){return;}visited[p]=1;for(int i=0;i<map[p].size();i++){int q=map[p][i].end;int cost=map[p][i].cost;int dis=map[p][i].distance;if(!visited[q]){if(city[q].distance>city[p].distance+dis){city[q].distance=city[p].distance+dis;city[q].cost=city[p].cost+cost;city[q].path=p;//q前面的一个点是p }else if(city[q].distance==city[p].distance+dis&&city[q].cost>city[p].cost+cost){city[q].cost = city[p].cost+cost;  city[q].path =p; }}}}
}
void output(int p){stack<int> res;res.push(p);while(city[p].path!=-1){p=city[p].path;res.push(p);}while(!res.empty()){cout<<res.top()<<" ";res.pop();}
}
int main(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin);#endifcin>>n>>m>>start>>dest;map.clear();map.resize(n);for(int i=0;i<m;i++){int c1,c2,dis,cost;cin>>c1>>c2>>dis>>cost;map[c1].push_back(Edge(c2,dis,cost));map[c2].push_back(Edge(c1,dis,cost));}Dijkstra(start,dest);output(dest);cout<<city[dest].distance<<" "<<city[dest].cost<<endl;#ifndef ONLINE_JUDGEfclose(stdin);#endifreturn 0;
}


这篇关于1030. Travel Plan (30)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584990

相关文章

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

QT Travel

Code Resource: https://github.com/MoreYoungGavin/QT_Travel.git What is QT? QT is a cross-platform application development framework for desktop,embedded and mobile. What need install QT before? Yo

JobScheduler 调用导致的运行时长30分钟的功耗问题

一、SDK 的使用情况与功耗影响 案例是否导致功耗变大onStartJob return true 且子线程没有调用jobFinished()告知系统功耗变大,最长带来30分钟的partial wakelock 长持锁onStartJob return true 且子线程调用jobFinished()告知系统功耗有影响,主要线程执行时长,标准是30秒内onStartJob return fals

嵌入式面试经典30问:一

什么是嵌入式系统? 嵌入式系统是指嵌入到某个对象体系中的专用计算机系统,它负责执行特定的任务,具有专用性、隐蔽性、资源受限和可靠性要求高等特点。通常包括硬件和软件两部分,硬件以微处理器为核心,软件则负责控制和管理硬件资源,实现特定的应用功能。 嵌入式系统和普通计算机系统有什么区别? 嵌入式系统与普通计算机系统的主要区别在于目的、资源、性能和成本等方面。嵌入式系统通常针对特定应用设计,具有体积小

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息交流,推动新能源技术的创新和应用,为全球能源领域的可持续发展贡献力量。期待着各方专家学者的共同参与和卓越贡献,共同开创电力系统未来的新篇章。

Study Plan For Algorithms - Part24

1. 包含min函数的栈 定义栈的数据结构,要求在该类型中实现一个 min 函数,能够获取栈的最小元素。在该栈中,调用 min、push 以及 pop 函数的时间复杂度均为 O (1)。 方法: class MinStack:def __init__(self):self.stack = []self.min_stack = [float('inf')]def push(self, x):sel