转载请注明出处:http://blog.csdn.net/a1dark

分析:比一般最短路多了一个花费、多加一个判断即可、用的SPFA、这道题让我搞清楚了以前定义INF为啥爆的问题、受益颇多、

#include<stdio.h>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 0x7fffffff
#define N 1005
struct node{
int len,cost;
}map[N][N];
node dist[N];
int vis[N];
int m,n;
void spfa(int x){
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
dist[i].len=INF;
dist[i].cost=INF;
}
dist[x].len=0;
dist[x].cost=0;
queue<int >q;
q.push(x);
vis[x]=1; while(!q.empty()){
int now=q.front();
q.pop();
vis[now]=0;
for(int i=1;i<=n;i++){
if(map[now][i].len+dist[now].len<dist[i].len&&map[now][i].len!=INF){
dist[i].len=map[now][i].len+dist[now].len;
printf("%d\n",map[now][i].len);
dist[i].cost=map[now][i].cost+dist[now].cost;
if(!vis[i]){
q.push(i);
vis[i]=1;
}
}
if(map[now][i].len+dist[now].len==dist[i].len&&map[now][i].cost+dist[now].cost<dist[i].cost){
map[now][i].cost+dist[now].cost==dist[i].cost;
}
}
}
}
void init(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i==j){
map[i][j].len=0;
map[i][j].cost=0;
}
else{
map[i][j].len=INF;
map[i][j].cost=INF;
}
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0&&m==0)break;
init();
int s,e,d,p;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&s,&e,&d,&p);
if(d<map[s][e].len){
map[s][e].len=d;
map[e][s].len=d;
map[s][e].cost=p;
map[e][s].cost=p;
}
else if(d==map[s][e].len&&p<map[s][e].cost){
map[s][e].cost=p;
map[e][s].cost=p;
}
}
int st,ed;
scanf("%d%d",&st,&ed);
spfa(st);
printf("%d %d\n",dist[ed].len,dist[ed].cost);
}
return 0;
}

HDU 3790 最短路径问题 (SPFA)的更多相关文章

  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 最短路径问题(SPFA || Dijkstra )

    题目链接 题意 : 中文题不详述. 思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次. #include < ...

  4. HDU 3790 最短路径问题 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 简单的最短路问题,这题听说有重边.我用spfa和dijkstra写了一遍,没判重边,速度都差不多 ...

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

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

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

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

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

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

  8. hdu 3790 最短路径问题(迪杰斯特拉)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. #HDU 3790 最短路径问题 【Dijkstra入门题】

    题目: 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. JAVA语言的素数判断,随机数,函数调用

    近来刚学JAVA,就从JAVA写起吧,JAVA判别素数,其实方法和C/C++没什么区别,主要就是想谈一下,其中包括的3个点. (1)JAVA语言产生随机数,random函数,定义参数max的作用是给出 ...

  2. 杭电ACM 偶数求和

    偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. [C++参考]拷贝构造函数的参数必须是引用类型

    在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识.在effective C++中说过这么一点:拷贝构造函数的参数必须是引用类型的.但是为什么呢? ...

  4. Laravel 5.1 ACL权限控制 一

    请自行添加命名空间,代码下载地址 https://github.com/caoxt/learngit 1.所需要用到的数据表 users(用户表).roles(角色表).role_user(用户角色对 ...

  5. java中printf中用法详解

    目前printf支持以下格式: %c 单个字符 %d 十进制整数 %f 十进制浮点数 %o 八进制数 %s 字符串 %u 无符号十进制数 %x 十六进制数 %% 输出百分号% printf的格式控制的 ...

  6. (Problem 47)Distinct primes factors

    The first two consecutive numbers to have two distinct prime factors are: 14 = 2  7 15 = 3  5 The fi ...

  7. DELPHI编写服务程序总结

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  8. cmake 学习笔记(四)

    接前面的一二三,学习一下 CMakeCache.txt 相关的东西. CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). ...

  9. MFC内部结构剖析

    //////////////////////////////////////////////////////////////////////////////////////////MFC程序的执行顺序 ...

  10. Erich Gamma

    Erich Gamma是IBM的杰出工程师.他是Jazz项目的领头人之一,曾担任Eclipse的Java开发环境JDT项目的领导,目前是Eclipse的项目管理委员会成员.Erich也是经典书籍< ...