PTA 数据结构与算法题目集(中文)5-9 旅游规划 (25分)
2017-04-15 16:42
441 查看
#include <stdio.h>
/*
Dijkstra算法 ,对于收费:
bis[j]=bis[u]+b[u][j];在路径改变或路径相同收费更少时改变
*/
#define inf 9999999
int n,m,s,d;
int vis[505];
int dis[505];
int bis[505];
int a[505][505];
int b[505][505];
void disg()
{
for(int i=0;i<n;i++)
{
vis[i]=0;
dis[i]=a[s][i];
bis[i]=b[s][i];
}
dis[s]=0;
vis[s]=1;
for(int i=1;i<n;i++)
{
int min=inf;
int u=s;
for(int j=0;j<n;j++)
{
if(!vis[j]&&min>dis[j])
{
u=j;
min=dis[j];
}
vis[u]=1;
for(int j=0;j<n;j++)
{
if(dis[u]+a[u][j]<dis[j])
{
dis[j]=dis[u]+a[u][j];
bis[j]=bis[u]+b[u][j];
}
else if(dis[u]+a[u][j]==dis[j]&&bis[j]>bis[u]+b[u][j])
bis[j]=bis[u]+b[u][j];
}
}
}
printf("%d %d\n",dis[d],bis[d]);
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&d);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j)a[i][j]=b[i][j]=0;
else a[i][j]=b[i][j]=inf;
for(int i=0;i<m;i++)
{
int u,v,test,cost;
scanf("%d %d %d %d",&u,&v,&test,&cost);
if(a[u][v]==test&&b[u][v]>cost)b[u][v]=b[v][u]=cost;
else if(a[u][v]>test)
{
a[u][v]=a[v][u]=test;
b[u][v]=b[v][u]=cost;
}
}
disg();
return 0;
}
/*
Dijkstra算法 ,对于收费:
bis[j]=bis[u]+b[u][j];在路径改变或路径相同收费更少时改变
*/
#define inf 9999999
int n,m,s,d;
int vis[505];
int dis[505];
int bis[505];
int a[505][505];
int b[505][505];
void disg()
{
for(int i=0;i<n;i++)
{
vis[i]=0;
dis[i]=a[s][i];
bis[i]=b[s][i];
}
dis[s]=0;
vis[s]=1;
for(int i=1;i<n;i++)
{
int min=inf;
int u=s;
for(int j=0;j<n;j++)
{
if(!vis[j]&&min>dis[j])
{
u=j;
min=dis[j];
}
vis[u]=1;
for(int j=0;j<n;j++)
{
if(dis[u]+a[u][j]<dis[j])
{
dis[j]=dis[u]+a[u][j];
bis[j]=bis[u]+b[u][j];
}
else if(dis[u]+a[u][j]==dis[j]&&bis[j]>bis[u]+b[u][j])
bis[j]=bis[u]+b[u][j];
}
}
}
printf("%d %d\n",dis[d],bis[d]);
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&d);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(i==j)a[i][j]=b[i][j]=0;
else a[i][j]=b[i][j]=inf;
for(int i=0;i<m;i++)
{
int u,v,test,cost;
scanf("%d %d %d %d",&u,&v,&test,&cost);
if(a[u][v]==test&&b[u][v]>cost)b[u][v]=b[v][u]=cost;
else if(a[u][v]>test)
{
a[u][v]=a[v][u]=test;
b[u][v]=b[v][u]=cost;
}
}
disg();
return 0;
}
相关文章推荐
- PTA 数据结构与算法题目集(中文)5-4 是否同一棵二叉搜索树 (25分)
- PTA 数据结构与算法题目集(中文)5-8 哈利·波特的考试 (25分)
- PTA 数据结构与算法题目集(中文)5-5 堆中的路径 (25分)
- PTA 数据结构与算法题目集(中文)5-11 关键活动 (30分)
- pta-数据结构与算法题目集(中文)--4-4 链式表的按序号查找
- PTA 数据结构与算法题目集(中文)6-11
- PTA 数据结构与算法题目集(中文)5-7 六度空间 (30分)
- PTA 数据结构与算法题目集(中文)6-2
- pta-数据结构与算法题目集(中文)-4-3 求链式表的表长
- PTA 数据结构与算法题目集(中文)6-1
- PTA 数据结构与算法题目集(中文)6-10
- PTA 数据结构与算法题目集(中文)6-5
- pta-数据结构与算法题目集(中文)-4-1-单链表逆转
- 数据结构与算法题目集(中文)——5-53 两个有序序列的中位数 (25分)——链表
- PTA 数据结构与算法题目集(中文)6-9
- PTA 数据结构与算法题目集(中文)6-6
- pta-数据结构与算法题目集(中文)-4-2 顺序表操作集
- 数据结构与算法题目集(中文)4-11 先序输出叶结点 (15分)
- PTA 数据结构与算法题目集 5-1 最大子列和问题
- 数据结构与算法题目集(中文)4-10 二分查找 (20分)