hdoj 2544 最短路径 dijkstra + 优先队列

2024-04-06 00:08

本文主要是介绍hdoj 2544 最短路径 dijkstra + 优先队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击打开链接

这题 注意点 :

    用vector模拟 邻接表每个Case需要 清空vector (切记)

   可以只用一个Edge对象 同时表示 优先队列的(顶点,距离)对象 又表示边集合

  优先队列 比较的两种写法 一种写成friend形式(不能加const) 一种末尾必须加const


0ms AC

#include<iostream>
#include<queue>
#include<string.h>
#define MAXN 105
#define INF 9999999
#define MAXM 10005
using namespace std;struct Edge{int to, w;Edge(){}Edge(int t, int we){to = t; w = we;}bool operator < (const Edge &o) const{return w > o.w;} 
};
//struct Node{//可以用 Edge取代 这个
//	int u, d;
//	Node(){}
//	Node(int u1, int d1):u(u1),d(d1){}//这是 初始化列表的方法
//	friend bool operator < (const Node &a, const Node &b){
//		return a.d > b.d;
//	} 
//};
int n, m;bool vis[MAXN];
int dis[MAXN];
vector<Edge> adj[MAXN];int dijkstra(){priority_queue<Edge> pq;memset(vis,false, sizeof(vis));memset(dis,INF,sizeof(dis));dis[1] = 0;pq.push(Edge(1,0));while(!pq.empty()){Edge t = pq.top();int cur = t.to;if(cur == n){return dis[n];}vis[cur] = true;//每次只有这里(距离确定的时候设置为已经访问)pq.pop();for(int i = 0; i < adj[cur].size(); ++i){Edge e = adj[cur][i];//貌似 不能直接用 adj[i][j]当Edge用 if(!vis[e.to]){if(dis[e.to] > dis[cur] + e.w){dis[e.to] = dis[cur] + e.w;pq.push(Edge(e.to, dis[e.to]));//   (顶点,距离)}}}}
}int main(){int i, j, a, b, c;while(scanf("%d%d",&n,&m) && n!=0 && m!=0){for(i = 1; i <= n; ++i)adj[i].clear(); //一定 记得清除 数据 for(i = 1; i <= m; ++i){scanf("%d%d%d",&a,&b,&c);adj[a].push_back(Edge(b,c));adj[b].push_back(Edge(a,c));}int ans = dijkstra();printf("%d\n",ans);
//			for(i = 1; i <= n; ++i){
//				for(j = 0; j < adj[i].size(); ++j){
//					Edge e = adj[i][j];
//					printf("%d %d %d\n",i,e.to,e.w);
//				}	
//			}}}



这篇关于hdoj 2544 最短路径 dijkstra + 优先队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键