最短路径问题

                                                                  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. 题解报告:hdu 2062 Subset sequence

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2062 Problem Description 考虑集合An = {1,2,...,n}. 例如,A1 ...

  2. ORA-01144_表空间数据文件超出最大限制

    Oracle11gR2扩展表空间报ORA-01144错误. 数据块大小为8K的数据库,单个数据文件大小限制在32GB内. 解决办法: 1.增加表空间数据文件的方式: 2.创建BIGFILE表空间:

  3. jsp的简介

    https://www.w3cschool.cn/jsp/jsp-intro.html

  4. 222 Count Complete Tree Nodes 完全二叉树的节点个数

    给出一个完全二叉树,求出该树的节点个数.完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底层为第 h ...

  5. .NET面试题解析(00)-系列文章索引

    .NET面试题解析(01)-值类型与引用类型 .NET面试题解析(02)-拆箱与装箱 .NET面试题解析(03)-string与字符操作 .NET面试题解析(04)-类型.方法与继承 .NET面试题解 ...

  6. JDBC连接Oracle工具类

    import java.sql.*;import java.util.ResourceBundle; /** * jdbc工具类,负责: * 1. 加载/注册数据库驱动程序 * 2. 获取数据库连接 ...

  7. DeltaFish 选题报告总结

    选题结果:校园物资流动系统 报告地点:3A101 会议时间:16:00 ~ 18:00 与会人员:软工小组全体成员 请假人员:无  缺席人员:无 报告人:陈志锴 一.报告内容总结 1.产品功能 针对校 ...

  8. mysql 插入多条记录,重复值不插入

    只去除主键与唯一索引的字段,字段为null时 是可以重复插入的domo: insert ignore into table_name(email,phone,user_id) values('test ...

  9. Linux下PPPoE Server测试环境搭建

    1.1  服务器软件安装 安裝PPPoE Server 所需的软件: 安装ppp模块: sudo apt-get install ppp   //一般默认下已安装 安装rp-pppoe,从网络上下载安 ...

  10. git 出现 The current branch is not configured for pull No value for key branch.master.merge found in configuration

    以下是我在网上找到的不错的文章,我参考后已解决我的问题: http://my.oschina.net/robinsonlu/blog/144085 http://www.cnblogs.com/zha ...