PTA数据结构与算法题目集(中文)  7-9

7-9 旅游规划 (25 分)
 

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

输入格式:

输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市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

题目分析:一道图的Dijkstra算法基本题 注意本题中不需要输出 最短路径的顺序 所以不需要记录路径的Path数组 需要记录源点到目标点的路径长度Dist数组 还要注意决定路径的是长度和价格两个因素 所以再判断完长度后要判断价格 如果因素更多,要增加更多的判断
 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXVERTEXNUM 500
#define INIFITY 65535 typedef struct ENode* Edge;
struct ENode
{
int V1, V2;
int Length;
int Weight;
}; typedef struct EleNode
{
int Length;
int Weight;
}ElementType; typedef struct GNode* Graph;
struct GNode
{
int Nv;
int Ne;
ElementType G[MAXVERTEXNUM][MAXVERTEXNUM];
}; Graph BuildGraph(int VertexNum)
{
Graph Gra = (Graph)malloc(sizeof(struct GNode));
Gra->Nv = VertexNum;
Gra->Ne = ;
for(int i=;i<Gra->Nv;i++)
for (int j = ; j < Gra->Nv; j++)
{
if (i == j)
{
Gra->G[i][j].Length = ;
Gra->G[i][j].Weight = ;
}
else
{
Gra->G[i][j].Length = INIFITY;
Gra->G[i][j].Weight = INIFITY;
}
}
return Gra;
} void Insert(Edge E, Graph Gra)
{
Gra->G[E->V1][E->V2].Length = E->Length;
Gra->G[E->V1][E->V2].Weight = E->Weight; Gra->G[E->V2][E->V1].Length = E->Length;
Gra->G[E->V2][E->V1].Weight = E->Weight;
} Graph CreateGraph(int N,int M)
{
Edge E = (Edge)malloc(sizeof(struct ENode));
Graph Gra = BuildGraph(N);
Gra->Ne = M;
for (int i = ; i < Gra->Ne; i++)
{
scanf("%d%d%d%d", &(E->V1), &(E->V2), &(E->Length), &(E->Weight));
Insert(E, Gra);
}
return Gra;
} int Dist[MAXVERTEXNUM];
int Price[MAXVERTEXNUM];
int Collected[MAXVERTEXNUM];
int FindMin(Graph G)
{
int MinDist= INIFITY;
int Min = -;
for (int i = ; i < G->Nv; i++)
{
if (!Collected[i] && Dist[i] < MinDist)
{
MinDist = Dist[i];
Min = i;
}
}
return Min;
}
void Dijkstra(Graph Gra, int V)
{
for (int i = ; i < Gra->Nv; i++)
{
Dist[i] = Gra->G[V][i].Length;
Price[i] = Gra->G[V][i].Weight;
}
Collected[V] = ;
while ()
{
int Min = FindMin(Gra);
if (Min == -)
break;
for (int i = ; i < Gra->Nv; i++)
{
if (!Collected[i]&&Dist[Min] + Gra->G[Min][i].Length < Dist[i])
{
Dist[i] = Dist[Min] + Gra->G[Min][i].Length;
Price[i] = Price[Min] + Gra->G[Min][i].Weight;
}
else if (!Collected[i]&&Dist[Min] + Gra->G[Min][i].Length == Dist[i] && Price[Min] + Gra->G[Min][i].Weight < Price[i])
{
Price[i] = Price[Min] + Gra->G[Min][i].Weight;
}
}
Collected[Min] = ;
}
}
int main()
{
int N, M,S,D;
scanf("%d%d%d%d", &N, &M, &S, &D);
Graph G = CreateGraph(N, M);
Dijkstra(G, S);
printf("%d %d", Dist[D],Price[D]);
return ;
}

PTA数据结构与算法题目集(中文) 7-9的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分)   给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...

  2. PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)

    PTA数据结构与算法题目集(中文)  7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分)   给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...

  3. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...

  4. PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)

    PTA数据结构与算法题目集(中文)  7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分)   每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...

  5. PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)

    PTA数据结构与算法题目集(中文)  7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分)   在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...

  6. PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)

    PTA数据结构与算法题目集(中文)  7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分)   胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...

  7. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  8. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  9. PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)

    PTA数据结构与算法题目集(中文)  7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...

  10. PTA数据结构与算法题目集(中文) 7-34

    PTA数据结构与算法题目集(中文)  7-34 7-34 任务调度的合理性 (25 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...

随机推荐

  1. 第一篇:解析Linux是什么?能干什么?它的应用领域!

    不得不说的前言(不看完睡觉会尿床):饿货们~!你说你们上学都学了点啥?这不懂那也不懂,快毕业了啥也不会.专业课程不学好毕业了也找不到好工作.爸妈给你养大,投资了多少钱.你毕业后随便找了个什么鸡毛工作开 ...

  2. pikachu——暴力破解

    前述: 前面学习了sqli-labs 和 DVWA,也算是初步涉足了web漏洞,了解了一些web漏洞的知识.所以在pikachu上面,会更加仔细认真,把前面没有介绍到的知识点和我一边学习到的新知识再补 ...

  3. Linux系统之LNMP及nginx反向代理实现

    1.编译安装LNMP,并安装wordpress 首先准备环境,编译安装LNMP可以是多台主机,也可以是单台主机,把nginx,mysql,php都集中安装在一个主机上:我这里以一台主机为例吧!! 一. ...

  4. 小程序post请求,后台接收不到数据的解决方法

    wx.request({ url: 'myurl', method:'POST', dataType:'json', data: { mydata:mydata }, success(res) { c ...

  5. webpack学习(一):webpack的安装和命令行

    本教程可以学习到如下内容: 1.webpack的安装 2.利用webpack命令打包js文件 3.如何在js文件里面引用css并将css文件在页面里面生效 4.学习webpack相关的高级的一些参数, ...

  6. Jmeter——如何使得token在各线程组间引用的游刃有余

    在以前的博文中,有介绍过,jmeter基本的关联,关联就是将参数在各接口中动态传参,使得接口脚本变得灵活使用,非一次性脚本.今天再来介绍一种jmeter全局变量的设置与使用,可以让脚本运用更丰富,场景 ...

  7. 有关KMP算法

    KMP算法: 此算法的本质是首先对于模板字符串进行计算,生成一个数组(next数组),该数组反映了模板字符串的情况. 例: S: ABADACABABCD P: ABAB 当我们查询到P3与S3(B和 ...

  8. 金三银四,还在为spring源码发愁吗?bean生命周期,看了这篇就够了

    第一,这绝对是一个面试高频题. 比第一还重要的第二,这绝对是一个让人爱恨交加的面试题.为什么这么说?我觉得可以从三个方面来说: 先说会不会.看过源码的人,这个不难:没看过源码的人,无论是学.硬背.还是 ...

  9. WTM 3.5发布,VUE来了!

    千呼万唤中,WTM的Vue前后端分离版本终于和大家见面了,我曾经跟群里1000多位用户保证过Vue版本会在春天到来,吹过的牛逼总算是圆上了. WTM一如既往地追求最大程度提高生产效率,所以内置的代码生 ...

  10. Error while importing sbt project:--创建sbt项目导入文件出错

    错误截图如下: Error while importing sbt project: List([info] Loading global plugins from C:\Users\RYJ\.sbt ...