题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717

5-9 旅游规划   (25分)

有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

输入格式:

输入说明:输入数据的第1行给出4个正整数NN、MM、SS、DD,其中NN(2\le N\le 5002≤N≤500)是城市的个数,顺便假设城市的编号为0~(N-1N−1);MM是高速公路的条数;SS是出发地的城市编号;DD是目的地的城市编号。随后的MM行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。

输出格式:

在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
0 1 1 20
1 3 2 30
0 3 4 10
0 2 2 20
2 3 1 20

输出样例:

3 40

/*
评测结果
时间 结果 得分 题目 编译器 用时(ms) 内存(MB) 用户
2017-07-04 21:04 正在评测 0 5-9 gcc 无 无
测试点结果
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 12/12 3 3
测试点2 答案正确 5/5 3 3
测试点3 答案正确 4/4 4 3
测试点4 答案正确 4/4 69 3 25分的题,套一下dijkstra就AC了
*/
#include<stdio.h>
#define MAXN 500
#define TRUE 1
#define FALSE 0
#define INFINITY 100000
#define ERROR -1
struct Edge
{
int dist;
int cost;
} gMatrix[MAXN][MAXN]; struct Vertex
{
int collected;
int totalDist;
int totalCost;
} gNodeTable[MAXN]; void InitMatrixAndTable()
{
int i,j;
for(i=0;i<MAXN;i++)
{
for(j=0;j<MAXN;j++)
{
gMatrix[i][j].dist=INFINITY;
gMatrix[i][j].cost=0;
}
gNodeTable[i].collected=FALSE;
gNodeTable[i].totalCost=INFINITY;
gNodeTable[i].totalDist=INFINITY;
}
} int FindNextVertex(int N)
{
int minIDX=ERROR;
int minDist=INFINITY;
int i;
for(i=0;i<N;i++)
{
if(gNodeTable[i].collected==FALSE)
{
if(minDist>gNodeTable[i].totalDist)
{
minIDX=i;
minDist=gNodeTable[i].totalDist;
}
}
}
return minIDX;
} void Dijkstra(int N,int S)
{
int i,j,vertex;
vertex=S;
gNodeTable[vertex].totalDist=0;
gNodeTable[vertex].totalCost=0;
while(vertex != ERROR)
{
gNodeTable[vertex].collected=TRUE;
for(i=0;i<N;i++)
{
if(gMatrix[vertex][i].dist==INFINITY)
continue;
if(gNodeTable[i].totalDist>gNodeTable[vertex].totalDist+gMatrix[vertex][i].dist)
{
gNodeTable[i].totalDist=gNodeTable[vertex].totalDist+gMatrix[vertex][i].dist;
gNodeTable[i].totalCost=gNodeTable[vertex].totalCost+gMatrix[vertex][i].cost;
}
if(gNodeTable[i].totalDist==gNodeTable[vertex].totalDist+gMatrix[vertex][i].dist)
{
if(gNodeTable[vertex].totalCost + gMatrix[vertex][i].cost < gNodeTable[i].totalCost)
{
gNodeTable[i].totalDist=gNodeTable[vertex].totalDist+gMatrix[vertex][i].dist;
gNodeTable[i].totalCost=gNodeTable[vertex].totalCost+gMatrix[vertex][i].cost;
} }
}
vertex=FindNextVertex(N);
}
} int main()
{
int i,v1,v2,dist,cost;
int N,M,S,D; //N节点数 M边数 S起点 D终点
scanf("%d %d %d %d",&N,&M,&S,&D);
InitMatrixAndTable();
for(i=0;i<M;i++)
{
scanf("%d %d %d %d",&v1,&v2,&dist,&cost);
gMatrix[v1][v2].dist=dist;
gMatrix[v1][v2].cost=cost;
gMatrix[v2][v1].dist=dist;
gMatrix[v2][v1].cost=cost;
}
Dijkstra(N,S);
printf("%d %d",gNodeTable[D].totalDist,gNodeTable[D].totalCost);
}
 

PTA 07-图6 旅游规划 (25分)的更多相关文章

  1. 【(图) 旅游规划 (25 分)】【Dijkstra算法】

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...

  2. PAT 07-图6 旅游规划 (25分)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  3. PTA 7-10(图) 旅游规划 最短路问题

    7-10(图) 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果 ...

  4. PTA甲级1094 The Largest Generation (25分)

    PTA甲级1094 The Largest Generation (25分) A family hierarchy is usually presented by a pedigree tree wh ...

  5. PTA 10-排序5 PAT Judge (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/677 5-15 PAT Judge   (25分) The ranklist of PA ...

  6. PTA 05-树7 堆中的路径 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/713 5-5 堆中的路径   (25分) 将一系列给定数字插入一个初始为空的小顶堆H[] ...

  7. PTA 04-树5 Root of AVL Tree (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/668 5-6 Root of AVL Tree   (25分) An AVL tree ...

  8. PTA 07-图4 哈利·波特的考试 (25分)

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  9. pta 编程题20 旅游规划

    其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostre ...

随机推荐

  1. siege4压测脚本示例

    agent="Siege 1.0"rcconfig="/opt/siege4.0/etc/siegerc"concurrent=$1repet=$2url=&q ...

  2. Maven常见知识介绍

    1)pom详解 2)pom详解 3)测试 4)插件与生命周期 5)maven生命周期 6)范围依赖

  3. .Net Mvc 返回Json,动态生成EasyUI Tree

    最近做一个项目,开始接触EasyUI,感觉很强大,很适合我这种对前台不是很感冒的人.在学习Tree的过程中,感觉网上的资料挺乱的,很多只是把EasyUI API 抄了一遍.现在把最近这段时间的学到的, ...

  4. python matplotlib.pyplot对图像进行绘制

    imshow()是对图像进行绘制 imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colo ...

  5. Hopfield 网络(上)

    讲的什么 这部分主要对 Hopfield 网络作一大概的介绍.写了其模型结构.能量函数和网络的动作方式.主要参考了网上搜到的一些相关 PPT.   概述 早在 1982 年,Hopfield 发表的文 ...

  6. redux是全局状态(数据)的管理机制,局部数据没有意义

    redux是全局状态(数据)的管理机制,局部数据没有意义

  7. linux yum 安装mysql

    1.安装查看有没有安装过: yum list installed MySQL* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安装mysql客户端: ...

  8. 国庆集训 || Wannafly Day1

    网址:https://www.nowcoder.com/acm/contest/201#question A.签到 手速石头剪刀布 #include <cstdio> #include & ...

  9. python之道04

    1.写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&q ...

  10. Python 入门基础

    第一章 计算机基础 1.1 硬件 CPU:处理和运算 内存:临时存储数据 硬盘:永久存储系统 操作系统:是一个软件(特殊), 调度每个硬件之间的数据传输 1.2 操作系统 Windows:xp/7/8 ...