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. vue-element-admin 模板 登录页面 post请求通过django的csrf认证,处理304错误

    经过一天的研究,终于把 vue-admin-template 模板的 post 请求 和django的api 弄通了 没有了那该死的304报错了 直接贴代码: 在main.js中 我直接给设置了一个 ...

  2. jenkins操作

    jenkins忘记用户名以及登录密码的解决方法 1.jenkins 根目录下找到config.xml,修改配置  <useSecurity>true</useSecurity> ...

  3. 自动控制理论的MATLAB仿真实例(二)

    %求方程的解 x=sym('x'); fx=(3*x*x+2*x)*(x*x+2.32*x+4)-(2*x+2.32)*(x*x*x+x*x) fx = 

  4. html5特性简要概括

    1.html5主要的设计目的: 互联网语义化,以便更好地被人类和机器阅读 更好的在移动设备上支持web应用 https://www.w3.org/TR/html5 新增内容: 新的语义标签 <h ...

  5. .net webapi 接收保存图片到服务器,并居中剪裁压缩图片

    原文链接:https:////www.cnblogs.com/Jackyye/p/12510943.html 每天解决一些c#小问题,在写微信小程序,或者一些手机软件接口,我们经常要用到上传图片到服务 ...

  6. [BUG]document.body.scrollTop=0不生效(回到顶部)

    描述 让body回滚到最顶部,设置 document.body.scrollTop = 0; . 微信内,安卓设备可以,ios设备不可以.   原因 MDN中 scrollTop是这样定义的 一个元素 ...

  7. 下载网页中的 pdf 各种姿势,教你如何 carry 各种网页上的 pdf 文档。

    关联词: PDF 下载 FLASH 网页 HTML 报告 内嵌 浏览器 文档 FlexPaperViewer swfobject. 这个需求是最近帮一个妹子处理一下各大高校网站里的 PDF 文档下载, ...

  8. 使用JDBC工具类模拟登陆验证-Java(新手)

    模拟登陆验证: package JdbcDome; import java.sql.Connection; import java.sql.PreparedStatement; import java ...

  9. 44. 更改oracle字符集编码american_america.zh16gbk 改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    注册表NLS_LANG值改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  10. 图解I/O模型

      本文带你鸟瞰I/O模型全貌,希望可以让你对I/O模型有一个直观的认识 什么是I/O?I/O的过程?同步阻塞 I/O同步非阻塞 I/OI/O多路复用异步I/O 什么是I/O?   I/O就是计算机内 ...