题意是这种,给你一个无向图,

每条边有距离和花费,

假设从第一个点到末点的最短路不唯一,

则输出最短路长度以及最少的花费。

否则输出长度和花费即可。

用传说中的链式向前星优化了一下边的存储,

写了个spfa解这道题。

链式向前星,是个静态链表。

是这样实现的,用一个数组box存放

跟全部起始点相连的最后一个存入的终点在

side结构数组中的下标是,

然后用side[i].next存放同样起始点的下一个终点。

我的代码例如以下:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int cnt,num_dot,num_side,st,ed,dis[1010],cos[1010],box[1010];
struct node
{
int to,next,d,c;
}side[200010];
void add(int from,int to,int d,int c)
{
side[cnt].to=to;
side[cnt].d=d;
side[cnt].c=c;
side[cnt].next=box[from];
box[from]=cnt++;
}
void init()
{
int s,e,d,c;
cnt=0;
memset(box,-1,sizeof(box));
for(int i=0;i<num_side;i++)
{
scanf("%d%d%d%d",&s,&e,&d,&c);
add(s,e,d,c);
add(e,s,d,c);
}
scanf("%d%d",&st,&ed);
}
void spfa()
{
int mid;
bool iq[1010];
queue<int>qq;
memset(iq,0,sizeof(iq));
memset(dis,127,sizeof(dis));
memset(cos,127,sizeof(cos));
iq[st]=1;
dis[st]=0;
cos[st]=0;
qq.push(st);
while(qq.size())
{
mid=qq.front();
qq.pop();
iq[mid]=0;
for(int i=box[mid];i>-1;i=side[i].next)
{
if(dis[side[i].to]>dis[mid]+side[i].d)
{
dis[side[i].to]=dis[mid]+side[i].d;
cos[side[i].to]=cos[mid]+side[i].c;
if(!iq[side[i].to])
{
qq.push(side[i].to);
iq[side[i].to]=1;
}
}
else if(dis[side[i].to]==dis[mid]+side[i].d&&cos[side[i].to]>cos[mid]+side[i].c)
{
cos[side[i].to]=cos[mid]+side[i].c;
if(!iq[side[i].to])
{
qq.push(side[i].to);
iq[side[i].to]=1;
}
}
}
}
}
int main()
{
while(scanf("%d%d",&num_dot,&num_side)&&(num_dot!=0||num_side!=0))
{
init();
spfa();
printf("%d %d\n",dis[ed],cos[ed]);
}
}

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. hdu-3790 最短路径问题(双重权值)

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

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

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

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

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

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

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

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

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

随机推荐

  1. 纸板上的虚拟现实和代码中的Cardboard

    虚拟现实技术 未来视角? Google Cardboard试玩与比較 阅读下面文字请请先戳 戳我戳我 2014年的Google I/O大会,一向以Geek自称的Google拿出了一个叫做Cardboa ...

  2. SQL SERVER中的流程控制语句

    流程控制语句 是指用来控制程序运行和流程分至点额命令.一般指的是逻辑计算部分的控制. 1.Begin End语句 封装了多个T-SQL语句组合,将他们组成一个单元来处理. 一般在条件查询或者循环等控制 ...

  3. js:进一步关闭(范围:下一个)

    function fn1(){   //创建一个数组   var fns = new Array();   //i这个变量是保存在fn1这个作用域中   for(var i=0;i<10;i++ ...

  4. Verifying Checksum ... Bad Data CRC 错误解决

    1.问题描述:使用SAM9X25  内核版本是2.6.39  在启动内核时会出现Verifying Checksum ... Bad Data CRC 错误 2.解决办法: 查看原先uboot参数: ...

  5. SVN更改登录用户(转)

    一) 原地址:http://www.ixna.net/articles/2606 //证书缓存 $ svn list https://host.example.com/repos/project Er ...

  6. CF 553A 组合DP

    http://codeforces.com/problemset/problem/553/A A. Kyoya and Colored Balls time limit per test 2 seco ...

  7. 不用Root权限获取已经安装的Apk安装包

    在安卓设备上安装的apk都会被保留一份在/data/app目录下,但是该目录对于普通用户来说只有可执行权限,是无法访问的. 但是其子文件具有可读权限. 意思也就说我们直接去查看/data/app这个目 ...

  8. Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发

    原文 Visual Studio跨平台开发实战(3) - Xamarin iOS多页面应用程式开发 前言 在前一篇教学中, 我们学会如何使用Visual Studio 搭配Xcode 进行iOS基本控 ...

  9. Galaxy (hdu 5073 数学)

    Galaxy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total S ...

  10. 普通的年轻状态机,纯C语言

    我们第一次接触到了状态机.在数字电路课程.计数器.串行奇偶校验.考了1连续报错电路 等待,两者都需要一个状态机模型.电路实现这些功能,与状态机的状态转移图.状态转移表是等价. 后.然后,我们联系了状态 ...