题目要求先选最短的道路,如果没有最短路可选,即几条道路都相等,再考花费。用Dijkstra更快一些。在选出最短边的同时加上对应的花费就可以了。详细请看代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 1002
#define inf 999999
int map[MAX][MAX],cost[MAX][MAX];
int n;
void DJ(int st,int en)//Dijkstra 传入起点和终点
{
int i,j,MIN,v;
int flag[MAX],dis[MAX],value[MAX];
for(i=1;i<=n;i++)
{
dis[i]=map[st][i];
value[i]=cost[st][i];//与一般模板相似,多加一个花费而已
}
memset(flag,0,sizeof(flag));
flag[st]=1;
for(i=1;i<=n;i++)
{
MIN=inf;
for(j=1;j<=n;j++)
{
if(!flag[j]&&MIN>dis[j])
{
v=j;
MIN=dis[j];
}
}
if(MIN==inf)break;
flag[v]=1;
for(j=1;j<=n;j++)
{
if(!flag[j]&&map[v][j]<inf)
{
if(dis[j]>dis[v]+map[v][j])
{
dis[j]=dis[v]+map[v][j];
value[j]=value[v]+cost[v][j];//先选好边长,同时也把对应的花费加上
}
else
if(dis[j]==dis[v]+map[v][j])//如果路长相等,则优先花费小的
{
if(value[j]>value[v]+cost[v][j])
value[j]=value[v]+cost[v][j];
}
}
} }
cout<<dis[en]<<" "<<value[en]<<endl;//输出到终点的最短路和花费
}
int main()
{
int i,j,m,a,b,d,p,st,en;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)break;
//memset(map,inf,sizeof(map));
//memset(cost,inf,sizeof(cost));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)//初始化为最大值,用for循环更快一些
{
map[i][j]=inf;
cost[i][j]=inf;
}
while(m--)
{
scanf("%d%d%d%d",&a,&b,&d,&p);
if(d<map[a][b]||(d==map[a][b]&&p<cost[a][b]))
{
map[a][b]=map[b][a]=d;
cost[a][b]=cost[b][a]=p;//开两个二维数组分别记录边长和花费
}
}
scanf("%d%d",&st,&en);
DJ(st,en);
}
return 0;
}

HDU-3790-最短路径的更多相关文章

  1. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  2. HDU - 3790 最短路径问题 (dijkstra算法)

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

  3. HDU 3790最短路径问题 [最短路最小花费]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790] 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)  ...

  4. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  5. hdu 3790 最短路径问题(两个限制条件的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

  6. HDU 3790 最短路径问题 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...

  7. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 题解报告:hdu 3790 最短路径问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起 ...

  9. hdu 3790 最短路径问题(迪杰斯特拉)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  10. hdu 3790 最短路径dijkstra(多重权值)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

随机推荐

  1. 定义页面的Dispose方法:[before]unload事件启示录

    前言 最近实施的同事报障,说用户审批流程后直接关闭浏览器,操作十余次后系统就报用户会话数超过上限,咨询4A同事后得知登陆后需要显式调用登出API才能清理4A端,否则必然会超出会话上限. 即使在页面上增 ...

  2. Android基于基于布局嵌套的页面导航实现

    页面如下: 主页面的布局分隔为三部分: 注意观察上面标记为红色的android:id均采用android系统默认的名称: 页面的导航组件: <?xml version="1.0&quo ...

  3. codeforces 678E Another Sith Tournament 概率dp

    奉上官方题解 然后直接写的记忆化搜索 #include <cstdio> #include <iostream> #include <ctime> #include ...

  4. web安全测试&渗透测试之sql注入~~

    渗透测试概念: 详见百度百科 http://baike.baidu.com/link?url=T3avJhH3_MunEIk9fPzEX5hcSv2IqQlhAfokBzAG4M1CztQrSbwsR ...

  5. 《Python基础教程(第二版)》学习笔记 -> 第七章 更加抽象

    对象的魔力 多态:意味着可以对不同类的对象使用同样的操作: 封装:对外部世界隐藏对象的工作细节: 继承:以普通的类为基础建立专门的类对象 多态① 多态和方法绑定到对象特性上面的函数称为方法(metho ...

  6. Echarts显示全球dns server物理位置

    今天YY给了我一大串dns server的ip,然后提出将这些ip物理位置显示在世界地图上(仅仅显示每个地区有几个dns server就好),苦逼了一下午,总算告一段落.把里面关键的点贴上来以后看.. ...

  7. Longest Increasing Sequence

    public class Longest_Increasing_Subsequence { /** * O(N^2) * DP * 思路: * 示例:[1,0,2,4,10,5] * 找出以上数组的L ...

  8. android 源码编译中的错误 解决

    1.编译种错误提示: arm-none-linux-gnueabi-gcc: directory: No such file or directory arm-none-linux-gnueabi-g ...

  9. ffmpeg内置aac编码器正式发布

    https://www.ffmpeg.org/#aac_encoder_stable February 15th, 2016, FFmpeg 3.0 "Einstein" FFmp ...

  10. source insight 支持CC 文件

    今天开始阅读LevelDB的代码,用source insight建立工程,但其不支持cc后缀的C++文件. 找到这篇<source insight看cc文件> 解决的根本办法:Option ...