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

每条边有距离和花费,

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

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

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

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

写了个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. VSTO之旅系列(三):自定义Excel UI

    原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...

  2. hdu1824(two-sat)

    传送门:Let's go home 题意:有n个队伍要回家,但是每队必须留下一人,而且m个限制,a留下,b必须回家,问能否在限制条件下每队留下一人. 分析:将每个队的队长和两个队员当成i和i':然后对 ...

  3. BZOJ 1324 Exca 神剑 最小割

    标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...

  4. 10、ERP设计之系统基础管理(BS)- 平台化设计

    ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...

  5. sort功能使用

    头: #include <algorithm> using namespace std; 1.默认的sort函数是按升序排序.  sort(a,a+n);                / ...

  6. Learning Cocos2d-x for WP8(1)——创建首个项目

    原文:Learning Cocos2d-x for WP8(1)--创建首个项目 Cocos2d-x for WP8开发语言是C++,系列文章将参考兄弟篇Learning Cocos2d-x for ...

  7. Java命令学习系列(7):Javap(转)

    原文出处: Hollis(@Hollis_Chuang) javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件 ...

  8. Sql SUBSTR函数

    SUBSTR( ) 从一个字符表达式或备注字段中返回一个字符串.该字符串起始于字符表达式或备注字段的指定位置,到指定数目字符结束. 例如: SUBSTR(“A1”, 1 1]) 结果:A

  9. 编C语言单元测试框架CUnit方法库

    /*********************************************************************  * Author  : Samson  * Date   ...

  10. Linux 该文件命令查看内容

    Linux系统,请使用以下命令来查看文件的内容: cat tac  从最后一行開始显示.能够看出 tac 是 cat 的倒著写! nl   显示的时候,顺道输出行号! more 一页一页的显示文件内容 ...