最短路径问题 HDU - 3790 (Dijkstra算法 + 双重权值)
参考:https://www.cnblogs.com/qiufeihai/archive/2012/03/15/2398455.html
最短路径问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2622 Accepted Submission(s): 825
(1<n<=1000, 0<m<100000, s != t)
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <sstream> #define INF 1000000000 using namespace std; int dis[];
int vis[];
int cost[];
int n, m; struct node
{
int len;
int cost;
}g[][]; void dijkstra(int start)
{
for(int i = ; i <= n; ++i)
{
dis[i] = INF;
cost[i] = INF;
}
dis[start] = ;
cost[start] = ; while()
{
int mark = -, minDis = INF;
for(int i = ; i <= n; ++i)
{
if(!vis[i] && dis[i] < minDis)
{
minDis = dis[i];
mark = i;
}
} if(mark == -)
break;
vis[mark] = ; for(int i = ; i <= n; ++i)
{
if(!vis[i])
{
if(dis[mark] + g[mark][i].len < dis[i])
{
dis[i] = dis[mark] + g[mark][i].len;
cost[i] = cost[mark] + g[mark][i].cost;
}
else if(dis[mark] + g[mark][i].len == dis[i] && cost[i] > cost[mark] + g[mark][i].cost)
{
cost[i] = cost[mark] + g[mark][i].cost;
} }
} }
} int main()
{
while(scanf("%d %d", &n, &m) != EOF)
{
if(n == && m == )
break; memset(vis, , sizeof(vis));
for(int i = ; i <= n; ++i)
for(int j = ; j <= n; ++j)
{
if(i == j)
g[i][j].len = ;
else
g[i][j].len = INF;
} int a, b, d, p;
for(int i = ; i <= m; ++i)
{
scanf("%d %d %d %d", &a, &b, &d, &p);
/* g[a][b].len = g[b][a].len = d;
g[a][b].cost = g[b][a].cost = p;*/ //这样写会出错,必须下面那样写,因为有可能有长度相同但花费不同的边 if(g[a][b].len > d)
{
g[a][b].len = g[b][a].len = d;
g[a][b].cost = g[b][a].cost = p;
} // 这里很重要!!
if(g[a][b].len == d && g[a][b].cost > p) // 如果长度相等,则存放较少的费用
{
g[a][b].cost = g[b][a].cost = p;
}
} int s, t;
scanf("%d %d", &s, &t);
dijkstra(s); cout << dis[t] << " " << cost[t] << endl;
} return ;
}
最短路径问题 HDU - 3790 (Dijkstra算法 + 双重权值)的更多相关文章
- Dijkstra算法为什么权值不能为负
Dijkstra算法当中将节点分为已求得最短路径的集合(记为S)和未确定最短路径的个集合(记为U),归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记 ...
- HDU 1533 KM算法(权值最小的最佳匹配)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 3790(两种权值的迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5249:KPI(权值线段树)
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...
- HDU 2112 HDU Today (Dijkstra算法)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1874 Dijkstra算法
先贴个网上找的比较通俗易懂的教程: 2.1Dijkstra算法(非负权,使用于有向图和无向图) Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心 ...
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...
- 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析
什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...
- 最短路径-迪杰斯特拉(dijkstra)算法及优化详解
简介: dijkstra算法解决图论中源点到任意一点的最短路径. 算法思想: 算法特点: dijkstra算法解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树.该算法常用于路由算 ...
随机推荐
- 05_Spring AOP原理
理解AOP相关概念 Target(目标对象):代理的目标对象 Joinpoint(连接点):所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. ...
- ES6之主要知识点(三)字符串
引自:http://es6.ruanyifeng.com/#docs/string#codePointAt codePointAt() String.fromCodePoint() at() incl ...
- 如何使用Pig集成分词器来统计新闻词频?
散仙在上篇文章中,介绍过如何使用Pig来进行词频统计,整个流程呢,也是非常简单,只有短短5行代码搞定,这是由于Pig的内置函数TOKENIZE这个UDF封装了单词分割的核心流程,当然,我们的需求是各种 ...
- kafka数据祸福和failover
k CAP帽子理论. consistency:一致性 Availability:可用性 partition tolerance:分区容忍型 CA :mysql oracle(抛弃了网络分区) CP:h ...
- java最常用的几种加密算法
1. BASE64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递 ...
- DataSourceUtils(加入线程管理事务)
第一二见之前的文章: DataSourceUtils(使用C3P0连接池的工具类) 替换第三步: import java.sql.Connection; import java.sql.ResultS ...
- Spring框架中的核心思想包括什么
(1)依赖注入 (2)控制反转 (3)面向切面
- 矩阵快速幂3 k*n铺方格
#include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...
- k8s 各个概念解释
pods , k8s 的核心, 所有的的操作都是围绕 pod , pod 可以认为是多个容器的捆绑.pod 里的容器里共享 cpu 网络 存储. ...
- Python爬虫笔记【一】模拟用户访问之验证码清理(4)
清理图片,对图片进行二值化,去边框,去干扰线,去点 from PIL import Image from pytesseract import * from fnmatch import fnmatc ...