数据结构实验之图论七:驴友计划
来源:互联网 发布:100日内成本 的源码 编辑:程序博客网 时间:2024/04/30 05:57
数据结构实验之图论七:驴友计划
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
做为一个资深驴友,小新有一张珍藏的自驾游线路图,图上详细的标注了全国各个城市之间的高速公路距离和公路收费情况,现在请你编写一个程序,找出一条出发地到目的地之间的最短路径,如果有多条路径最短,则输出过路费最少的一条路径。
Input
连续T组数据输入,每组输入数据的第一行给出四个正整数N,M,s,d,其中N(2 <= N <= 500)是城市数目,城市编号从0~N-1,M是城市间高速公路的条数,s是出发地的城市编号,d是目的地的城市编号;随后M行,每行给出一条高速公路的信息,表示城市1、城市2、高速公路长度、收费额,中间以空格间隔,数字均为整数且不超过500,输入数据均保证有解。
Output
在同一行中输出路径长度和收费总额,数据间用空格间隔。
Example Input
14 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20
Example Output
3 40
Hint
Author
xam
多源最短路算法
方法一:(适用于稀疏图)将单源最短路算法调用V(结点数)遍
T=O(V^3+V*E)
方法一:(适用于稀疏图)将单源最短路算法调用V(结点数)遍
T=O(V^3+V*E)
方法二:(适用于稠密图)Floyd算法
T=O(V^3)
以下是方法二:
T=O(V^3)
以下是方法二:
#include <iostream>
using namespace std;
#define INF 0x3f3f3f3f
int po[1024][1024];
int va[1024][1024];
int path[1024][1024];
int cost[1024][1024];
int n,m,s,d;
void Floyd()
{
int i,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
path[i][j]=po[i][j];
cost[i][j]=va[i][j];
}
}
for(k=0;k<n;k++)//插入的点
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(path[i][k]+path[k][j]<path[i][j])
{
path[i][j]=path[i][k]+path[k][j];
cost[i][j]=cost[i][k]+cost[k][j];
}
if(path[i][k]+path[k][j]==path[i][j])
{
if(cost[i][k]+cost[k][j]<cost[i][j])
{
cost[i][j]=cost[i][k]+cost[k][j];
}
}
}
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>m>>s>>d;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
po[i][j]=va[i][j]=0;
}
else
{
po[i][j]=va[i][j]=INF;
}
}
}
for(i=0;i<m;i++)
{
int a,b,c,d;
cin>>a>>b>>c>>d;
po[a][b]=po[b][a]=c;
va[a][b]=va[b][a]=d;
}
Floyd();
cout<<path[s][d]<<" "<<cost[s][d]<<endl;
}
return 0;
}
using namespace std;
#define INF 0x3f3f3f3f
int po[1024][1024];
int va[1024][1024];
int path[1024][1024];
int cost[1024][1024];
int n,m,s,d;
void Floyd()
{
int i,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
path[i][j]=po[i][j];
cost[i][j]=va[i][j];
}
}
for(k=0;k<n;k++)//插入的点
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(path[i][k]+path[k][j]<path[i][j])
{
path[i][j]=path[i][k]+path[k][j];
cost[i][j]=cost[i][k]+cost[k][j];
}
if(path[i][k]+path[k][j]==path[i][j])
{
if(cost[i][k]+cost[k][j]<cost[i][j])
{
cost[i][j]=cost[i][k]+cost[k][j];
}
}
}
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n>>m>>s>>d;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
po[i][j]=va[i][j]=0;
}
else
{
po[i][j]=va[i][j]=INF;
}
}
}
for(i=0;i<m;i++)
{
int a,b,c,d;
cin>>a>>b>>c>>d;
po[a][b]=po[b][a]=c;
va[a][b]=va[b][a]=d;
}
Floyd();
cout<<path[s][d]<<" "<<cost[s][d]<<endl;
}
return 0;
}
阅读全文
0 0
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- 数据结构实验之图论七:驴友计划
- findBug 错误修改指南(转载)
- 字符串数组初始化0 与memset 0 效率的分析
- symfony Route 相关问题
- java官方工具包微信H5支付报“支付验证签名失败”
- Linux 多线程编程
- 数据结构实验之图论七:驴友计划
- 使用JSONObject生成和解析json
- Unity3d中使用百度中文语音识别
- 脊回归(ridge regression)
- 深度理解函数
- [RK3399][Android7.1] Ubuntu查看具体内存信息
- IOS UIDynamic仿物理引擎-浮动碰撞效果
- HashMap的工作原理以及与hashtable的区别
- iOS-一个项目多个Target