数据结构实验之图论七:驴友计划
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
1 4 5 0 3 0 1 1 20 1 3 2 30 0 3 4 10 0 2 2 20 2 3 1 20
Example Output
3 40
弗洛伊德算法
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=0x3f3f3f3f;
int mp[1050][1050];
int cost[1050][1050];
int main()
{
int t;cin>>t;
while(t--)
{
int n,m,s,d;
int u,v,x,y;
cin>>n>>m>>s>>d;
memset(mp,maxn,sizeof(mp));
while(m--)
{
cin>>u>>v>>x>>y;
mp[u][v]=mp[v][u]=x;
cost[u][v]=cost[v][u]=y;
}
int i,j,k;
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(mp[i][j]>mp[i][k]+mp[k][j])
{
cost[i][j]=cost[i][k]+cost[k][j];
mp[i][j]=mp[i][k]+mp[k][j];
}
else if(mp[i][j]==mp[i][k]+mp[k][j]&&cost[i][j]>cost[i][k]+cost[k][j])
{
cost[i][j]=cost[i][k]+cost[k][j];
mp[i][j]=mp[i][k]+mp[k][j];
}
}
}
}
cout<<mp[s][d]<<" "<<cost[s][d]<<endl;
}
return 0;
}
驴友计划最短路径算法
本文介绍了一个基于弗洛伊德算法实现的程序,该程序用于找出从一个城市到另一个城市的最短路径及最低过路费。通过使用弗洛伊德算法,可以有效地解决涉及多个城市间的路径寻找问题。
168万+

被折叠的 条评论
为什么被折叠?



