其它pta数据结构编程题请参见:pta

题目

这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可。

 #include <iostream>
using namespace std; struct Node
{
int length;
int price;
}; int V, E;
Node **G; void buildGraph();
void deleteGraph();
void dijkstra(int s, int d);
int findMinDist(Node* dist, bool* collected);
bool cmp(Node a, Node b); int main()
{
int S, D;
cin >> V >> E >> S >> D;
buildGraph();
dijkstra(S, D);
deleteGraph();
return ;
} void buildGraph()
{
int a, b, l, p, i;
G = new Node*[V];
for (a = ; a < V; a++)
{
G[a] = new Node[V];
for (b = ; b < V; b++)
{
G[a][b].length = INT_MAX;
G[a][b].price = INT_MAX;
}
} for (i = ; i < E; i++)
{
cin >> a >> b >> l >> p;
G[a][b].length = l;
G[a][b].price = p;
G[b][a].length = l;
G[b][a].price = p;
}
} void deleteGraph()
{
for (int i = ; i < V; i++)
delete[] G[i];
delete[] G;
} bool cmp(Node a, Node b)
{
if (a.length != b.length)
return a.length < b.length;
else
return a.price < b.price;
} int findMinDist(Node* dist, bool* collected)
{
int minV;
Node minDist;
minDist.length = INT_MAX;
minDist.price = INT_MAX; for (int i = ; i < V; i++)
{
if (!collected[i] && cmp(dist[i], minDist))
{
minDist = dist[i];
minV = i;
}
} if (minDist.length == INT_MAX)
return -;
else
return minV;
} void dijkstra(int s, int d)
{
int v, w;
Node *dist, temp;
bool *collected;
dist = new Node[V];
collected = new bool[V];
for (v = ; v < V; v++)
{
dist[v] = G[s][v];
collected[v] = false;
} dist[s].length = ;
dist[s].price = ;
collected[s] = true; while (true)
{
v = findMinDist(dist, collected);
if (v == d) break;
collected[v] = true; for (w = ; w < V; w++)
{
if (!collected[w] && G[v][w].length < INT_MAX)
{
temp.length = dist[v].length + G[v][w].length;
temp.price = dist[v].price + G[v][w].price;
if (cmp(temp, dist[w]))
dist[w] = temp;
}
}
} cout << dist[d].length << " " << dist[d].price;
delete dist;
delete collected;
}

pta 编程题20 旅游规划的更多相关文章

  1. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  2. pta编程题19 Saving James Bond 2

    其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...

  3. pta 编程题16 Saving James Bond - Easy Version

    其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...

  4. pta 编程题15 列出连通集

    其它pta数据结构编程题请参见:pta 题目 题目要求分别以深度优先搜索和广度优先搜索输出图的连通集. 广度优先搜索要用到队列,先回顾一下循环队列: struct QNode { int* Data; ...

  5. pta 编程题14 Huffman Codes

    其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...

  6. pta 编程题13 File Transfer

    其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...

  7. pta 编程题12 堆中的路径

    其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...

  8. pta 编程题10 Root of AVL Tree

    其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入. 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整. 分为以下四种情况: 插入新节点后,以及旋转之后, ...

  9. pta 编程题8 Tree Traversals Again

    其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历. 题目的输入通过栈的pop给出了树的中序遍历的顺序.根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点, ...

随机推荐

  1. node -- 安装及快速开始

    下载并安装 node下载地址:https://nodejs.org/en/download/ 安装就绪后,打开命令行,操作如下: shift+右键/Win+r->cmd 检测是否安装成功: no ...

  2. 利用CSS制作脸书

    很多网站都支持图片上的头像框识别,鼠标在头像框处,会提示一些人物信息. 这次就利用CSS实现这样一个功能: div处主要包括两部分,一部分是图片:另一部分是链接以及脸框 <div class=& ...

  3. [sql] view plain copy

    [sql] view plain copy CREATE TABLE SYS_USER ( USER_CODE VARCHAR( 36 ) NOT NULL, LOGIN_NAME VARCHAR( ...

  4. java socket 网络通信 指定端口的监听 多线程 乱码

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  5. [SCOI2010]连续攻击游戏 BZOJ1854 二分图匹配

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  6. AT2161 シャッフル / Shuffling

    传送门 其实有一个显然的性质嘛:对于每个数,其实只要考虑它最右能被换到的位置就好了 然后设\(f[i][j]\)表示已经处理完了前\(i-1\)位,当前还有\(j\)个\(1\)可以自由支配(注意这里 ...

  7. 在使用Vue的过程中安装包的区别

    一:全局包: 用在终端里面 你可以在任何目录下进行安装,安装好了全局包之后,全局包一般安装在 C:/program files/nodejs C:/用户/xxx/App Data/Roaming/np ...

  8. 软件测试的生命周期&测试流程

    一.软件的生命周期 二.软件生命周期的阶段 三.软件模型 四.软件测试的基本流程 五.软件开发流程.测试流程梳理 六.C/S与B/S架构 七.对软件测试行业的理解 八.常见笔试面试题 一.软件的生命周 ...

  9. springMVC form表单提交多个对象集合--使用ajax提交--前台json格式数据封装方法

    (function ($) { $.fn.serializeJson = function () { var jsonData1 = {}; var serializeArray = this.ser ...

  10. java——方法重载与重写、构造方法、this关键字、static关键字、strictfp关键字、类的导入

    Java SE5新增加@Override注解,它并不是关键字,但是可以把它当作关键字使用.当你想要覆写(重写)某个方法时,可以选择添加这个注解,在你不留心重载而并非覆写了该方法时,编译器就会生成一条错 ...