最短路径问题

                                                                  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. VK Cup 2018 - Round 1 A. Primal Sport

    A. Primal Sport time limit per test 1.5 seconds memory limit per test 256 megabytes input standard i ...

  2. ACM_数数?诶?这么简单?

    数数?诶?这么简单? Time Limit: 2000/1000ms (Java/Others) Problem Description: 当看到GDUFE-GAME宣传海报上提到"场内人员 ...

  3. 总结用CoreText绘制文本时遇到的问题以及解决办法

    关于CoreText不做解释.用的人自然知道这个是干什么的. 功能非常强大,可以绘制文本,图片等. 这次用的Xcode7.0的版本.所以之前很多方法,现在不能用.也不是不能用,就是有黄色警告很不爽. ...

  4. 针对谷歌默认最小字体12px的正确解决方案

    利用css3的缩放,其最终大小就是:12px * 0.9(缩放比例) = 10.8px; 居然行得通.但回头一想,这么写的话,IE7 IE8会不会不兼容,还是12px呢?不出所料,果然不兼容.此时,又 ...

  5. Win10 UWP开发:摄像头扫描二维码/一维码功能

    这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobi ...

  6. 谷歌的 I/O 2019,究竟推出了什么新特性?

    前言 昨天,也即赶在微软 Build 2019 的第二天,一年一度的2019年 Google I/O大会在美国如期举行,Google I/O 2019全纪录:AI惊艳,Android Q真香,包括两款 ...

  7. esp8266 串口通讯

    1.发送 调用uart_init(115200,115200);初始化串口,波特率设置为115200.前面一个是设置uart0的波特率.后面一个是设置.uart的波特率 然后就可以使用uart0_tx ...

  8. spark集群启动步骤及web ui查看

    集群启动步骤:先启动HDFS系统,在启动spark集群,最后提交jar到spark集群执行. 1.hadoop启动cd /home/***/hadoop-2.7.4/sbinstart-all.sh ...

  9. biff - 新到邮件提醒

    总览 (SYNOPSIS) biff [ny ] 描述 (DESCRIPTION) Biff 通知系统在当前终端会话期间有新邮件是否提醒你. 支持的选项有 biff n 禁止新邮件提醒. y 开启新邮 ...

  10. CAD使用SetxDataLong写数据(com接口)

    主要用到函数说明: MxDrawEntity::SetxDataLong 写一个long扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 n ...