最短路径问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 23311    Accepted Submission(s): 6963

Problem Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
 
Input
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。

(1<n<=1000, 0<m<100000, s != t)
 
Output
输出 一行有两个数, 最短距离及其花费。
 
Sample Input
3 2
1 2 5 6
2 3 4 5
1 3
0 0
 
Sample Output
9 11

 解题思路:
朴素的Dij算法的基础增加额外的判断条件,在求最短路径的基础之上再去比较花费,记录最小值




源代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std; const int MAXN=1005;
const int INF=0x3f3f3f3f; int Graph[MAXN][MAXN];
int Cost[MAXN][MAXN];
int s,e;//开始,结束
int m,n;//边数,顶点数
int d[MAXN];//保存最小距离
int c[MAXN];//保存最小话费
bool used[MAXN];//是否已经加入 void Dijkstra()
{
int v;
int minpath;
for(int i=1;i<=n;i++)
{
d[i]=Graph[s][i];
c[i]=Cost[s][i];
}
memset(used,false,sizeof(used));
used[s]=true;
for(int i=1;i<=n;i++)
{
if(used[e])
{
break;
}
minpath=INF;
for(int j=1;j<=n;j++)
{
if(!used[j]&&d[j]<minpath)
{
minpath=d[j];
v=j;
}
}
used[v]=true;
for(int j=1;j<=n;j++)
{
if(!used[j]&&Graph[v][j]<INF)
{
if(d[j]>d[v]+Graph[v][j])
{
d[j]=d[v]+Graph[v][j];
c[j]=c[v]+Cost[v][j];
}
else if(d[j]==d[v]+Graph[v][j])
{
if(c[j]>c[v]+Cost[v][j])
{
c[j]=c[v]+Cost[v][j];
}
}
}
}
}
printf("%d %d\n",d[e],c[e]);
} int main()
{
while(scanf("%d %d",&n,&m)!=EOF&&n+m)
{
memset(Graph,INF,sizeof(Graph));
memset(Cost,INF,sizeof(Cost));
for(int i=1;i<=n;i++)
{
Graph[i][i]=0;
Cost[i][i]=0;
}
int v,u,len,money;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&v,&u,&len,&money);
if(Graph[v][u]>len)
{
Graph[v][u]=len;Graph[u][v]=len;
Cost[v][u]=money;Cost[u][v]=money;
}
else if(Graph[v][u]==len)
{
if(Cost[v][u]>money)
{
Cost[v][u]=money;Cost[u][v]=money;
}
}
}
scanf("%d %d",&s,&e);
Dijkstra();
}
return 0;
}


HDU3790-最短路径问题的更多相关文章

  1. HDU-3790 最短路径问题

    最短路径问题 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submis ...

  2. hdu-3790最短路径问题

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

  3. HDU-3790最短路径问题,第十遍终于过了~

    最短路径问题                                                                   Time Limit: 2000/1000 MS (J ...

  4. hdu3790最短路径问题 (用优先队列实现的)

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

  5. hdu3790最短路径问题

    题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...

  6. hdu-3790 最短路径问题(双重权值)

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

  7. HDU-3790 最短路径问题(双重权值)

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

  8. hdu3790最短路径问题(BFS+优先队列)

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

  9. hdu-3790 最短路径问题---dijkstra两重权值

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到 ...

  10. 最短路径-Dijkstra+Floyd+Spfa

    Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...

随机推荐

  1. macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏问题

    macOs升级到10.13.1Beta || JAVA升级到最新版之后PhpStorm菜单栏会消失,估计不止出现在PhpStorm,一系列jetbrains的产品可能都会有这个问题,包括eclipis ...

  2. SimpleDateFormat 常规用法

    public class SimpleDateFormat extends DateFormat SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (d ...

  3. 1.Introduction 介绍

    Welcome to Log4j 2! Introduction Almost every large application includes its own logging or tracing ...

  4. Grunt打包seajs项目

    在使用seajs时,常常将若干脚本分为多次require进来,这样开发中比较方便,但是,会增加http请求次数,在生产环境中需要进行打包合并.压缩等操作. 以Grunt构建工具为例,对一个seajs项 ...

  5. backface-visibility 3D修复

    backface-visibility  是作用于 3D transform 时候   默认是   backface-visibility: hidden;   当一个元素3D变换的时候,会立即看到背 ...

  6. CentOS卸载原有旧版OPENJDK并安装SUNJDK解决方案

    PS:由于图片是安装后进行截图所以出现的是1.8版本,步骤是完全正确的. 一.检测JDK 首先你要打开终端,为避免可能出现的权限问题建议直接su进入root.(PS:密码可以输入但不显示) 然后输入j ...

  7. ALTER TABLE SWITCH' statement failed. The table x' is partitioned while index 'x' is not partitioned.

    1.L_Monitoring有这么些字段,ID,Collecttime,PlateType,PlateNO以及其他一些这段.建立这个表的时候是个非分区表,其中ID是主键,并在Collecttime,P ...

  8. [转载] 详述三种现代JVM语言--Groovy,Scala和Clojure

    转载自http://www.tuicool.com/articles/jYzuAv和http://www.importnew.com/1537.html 在我与Martin Fowler曾经合作呈现的 ...

  9. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  10. Python 日志处理(三) 日志状态码分析、浏览器分析

    在企业中,从日志中提取数据进行分析,可以帮助企业更加了解用户行为,用户最感兴趣的产品或者内容,分析得到数据后,可以决定企业在今后的走向. 从这些日志数据中,比较重要的有: 1. 用户访问最多的url, ...