题目大意:

给你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. IOS开发之---触摸和手势

    Touch:在与设备的多点触摸屏交互时生成. 响应者对象 响应者对象就是可以响应事件并对事件作出处理.在iOS中,存在UIResponder类,它定义了响应者对象的所有方法.UIApplication ...

  2. 华为Java笔试题

    华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...

  3. Oracle SQL函数之转换函数

    chartorowid(c1) [功能]转换varchar2类型为rowid值 [参数]c1,字符串,长度为18的字符串,字符串必须符合rowid格式 [返回]返回rowid值 [示例] SQL> ...

  4. SQL Server 两种判断表名是否存在且删除的方式

      邓老师(老邓)教的 if exists(select * from sysobjects where name='Table_88') drop table Table_88  偷的((*^__^ ...

  5. linq读书笔记3-操作符之select与selectmany

    linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=& ...

  6. G - 密码 kmp、贪心、manachar等等等等

    G - 密码 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit Status ...

  7. [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断

    条款二 了解auto类型推断 基础知识 除了一处例外,auto的类型推断与template一样.存在一个直接的从template类型推断到auto类型推断的映射 三类情况下的推断如下所示: // ca ...

  8. 为什么JavaScript函数中的参数前面不能加var

    首先这里是JavaScript的语法规则. 其次在调用function()函数的时候参数时外部传入的.在传入之前就已经被声明了.没必要在函数参数里声明. 如果想要在函数里用新的参数 function( ...

  9. PHP搭建(windows64+apache2.4.7+mysql-5.6+php5.5)

    现在大部分一键安装包多是32位的,并不支持64位,直接在64位的系统上使用会报错的,所以我这里就来说说windows 64位系统如何建立Apache+PHP+MySQL环境的! 我这里演示用的wind ...

  10. Java API设计CheckList

    API设计原则:正确.好名.易用.易学.够快.够小.但我们从来不缺原则,〜〜〜 Interface 1.The Importance of Being Use Case Oriented,一个接口应当 ...