hdu3790最短路径问题
题意是这种,给你一个无向图,
每条边有距离和花费,
假设从第一个点到末点的最短路不唯一,
则输出最短路长度以及最少的花费。
否则输出长度和花费即可。
用传说中的链式向前星优化了一下边的存储,
写了个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最短路径问题的更多相关文章
- HDU-3790 最短路径问题
最短路径问题 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hdu-3790最短路径问题
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790最短路径问题,第十遍终于过了~
最短路径问题 Time Limit: 2000/1000 MS (J ...
- hdu3790最短路径问题 (用优先队列实现的)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input ...
- HDU-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu3790最短路径问题(BFS+优先队列)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu-3790 最短路径问题---dijkstra两重权值
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到 ...
- 最短路径-Dijkstra+Floyd+Spfa
Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...
随机推荐
- cocos2dx-3.0(1)------win7 32位android环境搭建
參照链接http://blog.csdn.net/wonengxing/article/details/23601359 ----我的生活,我的点点滴滴!! 一. Android工具安装 1. 安装J ...
- 【剑指offer】面试题24:二叉搜索树的兴许前序遍历序列
分析: 前序: 根 左 右 后序: 左 由 根 二叉搜索树: 左 < 根 < 右 那么这就非常明显了. def ifpost(postArray, start, end): #one or ...
- Android -> 怎样避免Handler引起内存泄露
很多其它内容,可訪问个人博客www.liangfeizc.com 错误代码 假设在Activiy中通过内部类(Runnable)的方式定义了一个变量runnable, final Runnable r ...
- [leetcode]3 Sum closest
问题叙述性说明: Given an array S of n integers, find three integers in S such that the sum is closest to a ...
- poj1463(树形dp)
题目链接:http://poj.org/problem?id=1463 题意:有N个点,每两个点至多只有一条边,如果在一个结点上放一个士兵,那他能看守与之相连的边,问最少放多少个兵,才能把所有的边能看 ...
- 使用Google Roads API抓取道路信息(java实现)
Google Roads API提供了强大的道路获取接口,用户仅仅需调用对应的API就能够获取对应区域的道路坐标以及道路的限速信息. 详细的调用方法例如以下: https://roads.google ...
- 新 Netflix 开源门户
Netflix 开源改革计划:新 Netflix 开源门户 http://www.oschina.net/news/67555/evolution-of-open-source-at-netflix ...
- Jersey的RESTful简单案例demo
REST基础概念: 在REST中的一切都被认为是一种资源. 每个资源由URI标识. 使用统一的接口.处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作. ...
- C语言中结构体參数变量的传递
[文章摘要] 在C语言中,结构体參数变量常常作为函数的參数来进行传递.但假设參数设置不当.会出现内存问题. 本文以实际的程序代码为例.具体地介绍怎样正确地使用结构体參数变量.为相关的开发工作提供了參考 ...
- python开发_tkinter_小球完全弹性碰撞游戏
python开发_tkinter_小球完全弹性碰撞游戏 完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改 ...