双重权值(SPFA算法)
来源:互联网 发布:美国gdp数据公布网站 编辑:程序博客网 时间:2024/05/17 03:39
试题描述:
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离
有多条路线,则输出花费最少的。
输入要求:
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数
s,t;起点s,终点t。(1
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string>#include <queue>using namespace std;#define MAX 1002#define INT 1000000int w[MAX];int cost[MAX];bool vis[MAX];struct node{ int w,cost;}map1[MAX][MAX];int n,m,a,b,d,p,s,t;void SPFA(){ queue<int> q; q.push(s); w[s]=0; cost[s]=0; vis[s]=true; while(!q.empty()) { int cur=q.front(); q.pop(); vis[cur]=true; for(int i=1;i<=n;i++) { if(map1[cur][i].w!=INT&&w[i]>=w[cur]+map1[cur][i].w) { w[i]=w[cur]+map1[cur][i].w; cost[i]=min(cost[i],cost[cur]+map1[cur][i].cost); if(!vis[i]){ vis[i]=true; q.push(i); } } } }}int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { map1[i][j].w=INT; map1[i][j].cost=INT; } w[i]=INT; cost[i]=INT; vis[i]=false; } for(int i=1;i<=m;i++) { scanf("%d %d %d %d",&a,&b,&d,&p); map1[a][b].w=map1[b][a].w=d; map1[a][b].cost=map1[b][a].cost=p; } scanf("%d %d",&s,&t); SPFA(); printf("%d %d\n",w[t],cost[t]); return 0;}
0 0
- 双重权值(SPFA算法)
- HDU3790 最短路径问题(双重权值+spfa)
- spfa算法(适用于存在负权)
- POJ3259(SPFA算法)
- poj 1724 spfa(有费用上限的最短路(双重标准最短路))
- Spfa算法 (模板源代码)
- spfa 算法 (单源最短路)
- poj3013-----spfa算法(难题)
- 最短路算法(SPFA)
- Spfa算法 (模板源代码)
- 最短路(SPFA)算法
- (转)SPFA算法详解
- SPFA算法 (最短路)
- SPFA算法(求最短路径)
- 最短路(SPFA算法)
- 单源最短路(SPFA算法)
- HDU 3790 最短路径问题 (双重权值)
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- unity之UI设计—简单按钮界面
- bzoj 3675: [Apio2014]序列分割 斜率优化dp
- MySQL逻辑架构、SQL加载执行顺序、七种JOIN模式图解
- leetcode--Maximum Depth of Binary Tree
- linux基本命令
- 双重权值(SPFA算法)
- cudnn环境变量配置
- XSS和CSRF区别?
- ThreadLocal
- linux之scp
- HDU 1232 畅通工程(并查集)
- 内置服务$http,登录案例
- Actor
- Angular之路由篇一