题目大意:

给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。

只需要再更新的时候判断一下就好

void dijstra(int s)
{
dist[s]=0;
for(int i=1;i<=n;i++)
{
s=findmin();
visit[s]=1;
for(int j=1;j<=n;j++)
{
if(dist[j]>dist[s]+MAP[s][j])
{
dist[j]=dist[s]+MAP[s][j];
val[j]=val[s]+w[s][j];
}
else if(dist[j]==dist[s]+MAP[s][j]&&val[j]>val[s]+w[s][j])
val[j]=val[s]+w[s][j];
}
}
}

完整代码如下:

/*
1.有重边
2.忘记是无向图了
*/
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1000+5;
int n,m;
int MAP[maxn][maxn];
int w[maxn][maxn];
int dist[maxn];
int visit[maxn];
int val[maxn];
int ss,tt;
void input()
{
int a,b,d,q;
memset(MAP,0x3f,sizeof(MAP));
memset(dist,0x3f,sizeof(dist));
memset(w,0,sizeof(w));
memset(visit,0,sizeof(visit));
memset(val,0,sizeof(val));
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a,&b,&d,&q);
if(MAP[a][b]>d)
{
MAP[a][b]=MAP[b][a]=d;
w[a][b]=w[b][a]=q;
}
}
cin>>ss>>tt;
}
int findmin()
{
int min=INF,ANS=0;
for(int i=1;i<=n;i++)
{
if(visit[i]==0)
{
if(dist[i]<min)
{
min=dist[i];
ANS=i;
}
}
}
return ANS;
}
void dijstra(int s)
{
dist[s]=0;
for(int i=1;i<=n;i++)
{
s=findmin();
visit[s]=1;
for(int j=1;j<=n;j++)
{
if(dist[j]>dist[s]+MAP[s][j])
{
dist[j]=dist[s]+MAP[s][j];
val[j]=val[s]+w[s][j];
}
else if(dist[j]==dist[s]+MAP[s][j]&&val[j]>val[s]+w[s][j])
val[j]=val[s]+w[s][j];
}
}
}
void init()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
void solve()
{
dijstra(ss);
printf("%d %d\n",dist[tt],val[tt]);
}
int main()
{
// init();
while(cin>>n>>m&&n&&m)
{
input();
solve();
}
}

【迪杰斯特拉双关键字最短路】【HDU3790】【最短路径问题】的更多相关文章

  1. 迪杰斯特拉算法dijkstra(可打印最短路径)

    #include <iostream> #include <iomanip> #include <string> using namespace std; #def ...

  2. bfs输出路径 && 最短路(迪杰斯特拉)输出路径

    问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #includ ...

  3. HDU6166-Senior Pan-Dijkstra迪杰斯特拉算法(添加超源点,超汇点)+二进制划分集合-2017多校Team09

    学长好久之前讲的,本来好久好久之前就要写题解的,一直都没写,懒死_(:з」∠)_ Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memor ...

  4. 迪杰斯特拉(Java)

    public class Dijsktra { public static void main(String[] args) { Dijsktra d=new Dijsktra(); int[][] ...

  5. dijkstra算法(迪杰斯特拉算法)

    dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...

  6. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  7. 数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++

    数据结构图之三(最短路径--迪杰斯特拉算法)   [1]最短路径 最短路径?别乱想哈,其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两 ...

  8. pat1003 迪杰斯特拉法和dfs求最短路

    本题的背景是求定点和定点之间的最短路问题(所有的最短路 不是一个解  是全部解,方法手段来自数据结构课程中的迪杰斯特拉算法和dfs(深度优先遍历). 分别用两种方法编程如下代码 dfs #includ ...

  9. HDU 2544最短路 (迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others)    Me ...

随机推荐

  1. Robot Framework 安装AutoItLibrary

    1. 下载AutoItLibrary-1.1_x64包,http://code.google.com/p/robotframework-autoitlibrary/ 2. 安装pywin32库,htt ...

  2. rem布局下使用背景图片和sprite图

    现在移动端页面用rem布局已经是一大流派了,成熟的框架如淘宝的flexiable.js,以及更轻量级的hotcss.用rem作单位使得元素能够自适应后,还有一块需要关注的,那就是背景图片.本文就来聊聊 ...

  3. Deppon接口开发

    一.1)  支持的传输协议  http ,暂时只支持HTTP协议进行通信. (2) 支持的数据传输格式  Json  ,所有接口暂只支持json消息格式. (3) 编码格式:UTF-8   交互编码格 ...

  4. WeixinJSBridge:微信浏览器内置JavaScript 对象

    微信公众平台开始支持前端网页,大家可能看到很多网页上都有分享到朋友圈,关注微信等按钮,点击它们都会弹出一个窗口让你分享和关注,这个是怎么实现的呢?今天就给大家讲解下如何在微信公众平台前端网页上添加分享 ...

  5. 【熊猫】POS销售

    select a.itemcode,b.itemname,b.spec,b.unit,b.rprice,sum(a.rqty) rqtyfrom tm_possale_detail a,sys_ite ...

  6. JQ选择器

    jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个 ...

  7. JDBC之一:JDBC快速入门

    (1)下载Oracle的JDBC驱动,一般放在$ORACLE_HOME/jdbc/lib目录,关于驱动的版本请见: http://elf8848.iteye.com/blog/811037 随Orac ...

  8. 日志管理-NLog日志框架简写用法

    本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...

  9. PHP数组排序函数array_multisort()函数详解

    这个函数因为用到了,并且在网上找了半天终于找到了一个写的通俗易懂的文章,在这里分享给大家. 原文链接:http://blog.163.com/lgh_2002/blog/static/44017526 ...

  10. 【stm32】用TIM1产生6路ADC,用CCR4触发ADC1的注入通道采样

    这几天一直在使用STM32来写sensorless BLDC的驱动框架,那么必须会用到TIM1的CCR1/CCR2/CCR3产生的六路互补PWM,以及用CCR4来产生一个中断,用来在PWM-ON的时候 ...