PTA数据结构与算法题目集(中文) 7-9
PTA数据结构与算法题目集(中文) 7-9
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。
输入格式:
输入说明:输入数据的第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的更多相关文章
- PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-43字符串关键字的散列映射 (25 分) 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义 ...
- PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分)
PTA数据结构与算法题目集(中文) 7-42整型关键字的散列映射 (25 分) 7-42 整型关键字的散列映射 (25 分) 给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射 ...
- PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)
PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分) 计算机程序设计能力考试(Programming Ability Test,简称P ...
- PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分)
PTA数据结构与算法题目集(中文) 7-40奥运排行榜 (25 分) 7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如 ...
- PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分)
PTA数据结构与算法题目集(中文) 7-39魔法优惠券 (25 分) 7-39 魔法优惠券 (25 分) 在火星上有个魔法商店,提供魔法优惠券.每个优惠劵上印有一个整数面值K,表示若你在购买某商 ...
- PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分)
PTA数据结构与算法题目集(中文) 7-38寻找大富翁 (25 分) 7-38 寻找大富翁 (25 分) 胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人.假 ...
- PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)
PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分) Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...
- PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)
PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某 ...
- PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分)
PTA数据结构与算法题目集(中文) 7-35 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市 ...
- PTA数据结构与算法题目集(中文) 7-34
PTA数据结构与算法题目集(中文) 7-34 7-34 任务调度的合理性 (25 分) 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“ ...
随机推荐
- WEB渗透 - 万能密码
asp万能密码 'or'='or' aspx万能密码 1: "or "a"="a 2: ')or('a'='a 3:or 1=1-- 4:'or 1=1-- 5 ...
- arm 添加 ftp server 之 bftpd
本来想装vsftp 结果装上以后执行报错 Segmentation fault , 换到几个 其它的小型ftp server 软件 ,试了 Stupid-FTPd,不能用. bftpd 可以使用,Ti ...
- Android 版的多合一Office应用也正式向iOS开放了
导读 在 Android 版的多合一 Office 应用「偷跑」不久后(官方证实上线时间比计划要早),为 iOS 准备的版本现在终于也结束 beta 测试正式上线了. 和只提供「有限」平板支持的 An ...
- 【python】定时锁屏,保护身体
前言 最近越来越懒,一上班坐到电脑前就不愿意动,不喝水也不起来走动,一下班离开电脑就头晕眼花.想起前两年被肾结石支配的恐惧o(╥﹏╥)o,,,还是写个小工具强制自己喝水防止复发吧.VS Code启动 ...
- 《Linux环境进程间通信》系列文章链接
深刻理解 Linux 进程间通信(IPC) http://www.ibm.com/developerworks/cn/linux/l-ipc/index.html Linux 环境进程间通信(一): ...
- Flask 之分析线程和协程
目录 flask之分析线程和协程 01 思考:每个请求之间的关系 02 threading.local 03 通过字典自定义threading.local 04 通过setattr和getattr实现 ...
- java -输入年龄判断是否符合范围。
//创建的一个包名. package demo3; //定义一个类. public class Test { //公共静态的主方法. public static void main(String[] ...
- 云CRM系统安全吗
云CRM系统有一个特点只要连接互联网就能够进行访问,这种访问可以是移动端也可以是电脑端的,而且本地CRM系统只允许电脑端访问.云CRM系统将数据存储在云服务器上,很多人就会问云CRM系统安全吗?下面和 ...
- linux环境下的时间编程
Linux下提供了丰富的api以供开发者们处理和时间相关的问题.然而这些接口看似各自为政实则有有着千丝万缕的联系,在学习和时间中引发了各种各样的混乱.因此时间处理成为了许多Linux开发者的梦魇,遇到 ...
- Github搜索技巧整理
Github官方网址:https://github.com/ 一.详细官方文档:https://help.github.com/en/github/searching-for-information- ...