最短路径问题

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

                                                                                                                                ->
 Link  <-

这道题题意很简单,n个景点,m条路(双向),每条路有一个距离和花费,然后给定起点和终点,求起点到终点的最短距离及花费,如果最短路径有多条,输出花费最小的那条

基于数据范围不大,除了弗洛伊德其他的最短路解法都是可以的,博主习惯用迪杰斯特拉,所以本文介绍dij的解法;

思路;最短路的变形,以前都是直接求出起点到终点的最短路,而这里就是加上了一个花费问题,所以我们在用dij算法时注意如果路径相同的时候取花费小的即可,否则,只要路径小,两个变量都无条件变;

坑点:样例水过,就是不知道跪在哪,看了讨论区才知道有重边的情况,所以在输入的时候需要注意如果两个点路径有多条相同的取花费小的,否则取路径最短的那条不用管花费;也就是说,不管在输入或者输出的时候都要以路径为前提,一定要的是最短的,如果最短的有多条再取花费小的;

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f;
const int N=1000+10;
struct node
{
int p,d;
} a[N][N];输入的;
struct node1
{
int d,p;
} v[N];起点到i点的最短路径及花费;
int vis[N];
int main()
{
int n,m,xx,yy,i,j,d,p;
while(~scanf("%d%d",&n,&m)&&n&&m)
{
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j].d=a[i][j].p=(i==j?0:INF);
memset(vis,0,sizeof(vis));
for(i=1; i<=m; i++)
{
scanf("%d%d%d%d",&xx,&yy,&d,&p);
if(d<a[xx][yy].d)//如果最短路只有一条,两个变量都无条件改变;
{
a[xx][yy].d=a[yy][xx].d=d;
a[xx][yy].p=a[yy][xx].p=p;
}
else if(d==a[xx][yy].d)//有多条相同的时候才取花费最小的;
{
a[xx][yy].p=a[yy][xx].p=min(p,a[xx][yy].p);
}
}
scanf("%d%d",&xx,&yy);
for(i=1; i<=n; i++) v[i].d=v[i].p=i==xx?0:INF;
for(i=1; i<=n; i++)
{
int x,mm=INF;
for(j=1; j<=n; j++)
if(!vis[j]&&v[j].d<=mm)
mm=v[x=j].d;
vis[x]=1;
for(j=1; j<=n; j++)
{
if(v[j].d>a[x][j].d+v[x].d)
{
v[j].d=a[x][j].d+v[x].d;
v[j].p=a[x][j].p+v[x].p;
}
else if(v[j].d==a[x][j].d+v[x].d)//如果最短路径有多条,取花费最小的;
v[j].p=min(v[j].p,a[x][j].p+v[x].p);
} }
printf("%d %d\n",v[yy].d,v[yy].p);
}
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 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...

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

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

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

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

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

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. 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 ...

随机推荐

  1. Sequence POJ - 2442

    Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...

  2. C#中的预编译指令介绍[转]

    原文链接 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量,但是它没有具体的值 ...

  3. 转 11g RAC R2 体系结构---Grid

    基于agent的管理方式 从oracle 11.2开始出现了多用户的概念,oracle开始使用一组多线程的daemon来同时支持多个用户的使用.管理资源,这些daemon叫做Agent.这些Agent ...

  4. [书目20141009]《ReWork》

    ReWork1: ============= 引言篇INTRODUCTION开局篇FIRST 新的现实缷负篇TAKEDOWNS 忘了“现实世界” 哪来的从错误中学习 计划即瞎猜 何必壮大? 工作狂 受 ...

  5. Java8-Lomda表达式

    Lomda表达式 /** * All rights Reserved, Designed By www.bingo.com * @Title TestLamda.java * @author yang ...

  6. [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...

  7. Django model 反向引用中的related_name

    转自:https://blog.csdn.net/lanyang123456/article/details/68962515 问题: 定义表Apple: class Apple( models.Mo ...

  8. 最新最强短视频SDK——来自RDSDK.COM

    北京锐动天地信息技术有限公司成立于2007年9月.多年来一直专注于音视频领域核心技术的研发, 拥有Windows.iOS.Android全平台自主知识产权的领先技术产品. 2011年获得新浪战略投资, ...

  9. IIS ARR(Application Request Route)与反向代理(Reverse Proxy)

    为何要用反向代理? 这里说说我的场景, 我在服务器上假设了SVN(Visual SVN)用的端口是:8080, 而我想通过输入svn.niusys.com就可以访问我的SVN服务器,也就是要通过80端 ...

  10. VS项目属性配置总结

    以下是针对VS2013下的VC++项目: Debug和Release说明: Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进 ...