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

题目

这道题考察最小生成树问题,用的是Prim算法。

和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录。

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int N, M;
  5. int** G;
  6. void buildGraph();
  7. void deleteGraph();
  8. int prim();
  9. int findMinDist(int dist[]);
  10.  
  11. int main()
  12. {
  13. cin >> N >> M;
  14. buildGraph();
  15. cout << prim();
  16. deleteGraph();
  17. return ;
  18. }
  19.  
  20. void buildGraph()
  21. {
  22. int i, j;
  23. G = new int*[N];
  24. for (i = ; i < N; i++)
  25. {
  26. G[i] = new int[N];
  27. for (j = ; j < N; j++)
  28. G[i][j] = INT_MAX;
  29. }
  30.  
  31. int v, w, d;
  32. for (i = ; i < M; i++)
  33. {
  34. cin >> v >> w >> d;
  35. v--; w--;//输入从1计数
  36. G[v][w] = d;
  37. G[w][v] = d;
  38. }
  39. }
  40.  
  41. void deleteGraph()
  42. {
  43. for (int i = ; i < N; i++)
  44. delete[] G[i];
  45. delete[] G;
  46. }
  47.  
  48. int findMinDist(int dist[])
  49. { /*返回未收录进MST的顶点中dist最小的顶点*/
  50. int minV, v;
  51. int minDist = INT_MAX;
  52. for (v = ; v < N; v++)
  53. {
  54. if (dist[v] != && dist[v] < minDist)
  55. {
  56. minDist = dist[v];
  57. minV = v;
  58. }
  59. }
  60. if (minDist < INT_MAX)
  61. return minV;
  62. return -;
  63. }
  64.  
  65. int prim()
  66. { /*返回最小生成树的权重*/
  67. int v, w, vCount = ;
  68. int totalWeight = ;
  69. int* dist = new int[N];
  70.  
  71. /*初始化,初始点下标为0*/
  72. for (v = ; v < N; v++)
  73. dist[v] = G[][v];
  74.  
  75. /*将0收进最小生成树MST*/
  76. dist[] = ;
  77. vCount++;
  78.  
  79. while (true)
  80. {
  81. v = findMinDist(dist);
  82. if (v == -)
  83. break;
  84.  
  85. totalWeight += dist[v];
  86. dist[v] = ; //收录v
  87. vCount++;
  88.  
  89. for (w = ; w < N; w++)
  90. {
  91. /*如果w没有被收录*/
  92. if (dist[w] != && G[v][w] < dist[w])
  93. {
  94. dist[w] = G[v][w];
  95. }
  96. }
  97. }
  98.  
  99. delete[] dist;
  100.  
  101. if (vCount < N)
  102. return -;
  103. return totalWeight;
  104. }

pta 编程题21 公路村村通的更多相关文章

  1. PTA 7-1 公路村村通 (30分)

    PTA 7-1 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N ...

  2. pat06-图6. 公路村村通(30)

    06-图6. 公路村村通(30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的 ...

  3. pta08-图7 公路村村通 (30分)

    08-图7 公路村村通   (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N ...

  4. 7-6 公路村村通(30 分) 【prime】

    7-6 公路村村通(30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤10 ...

  5. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  6. 7-10 公路村村通(30 分)(最小生成树Prim算法)

    7-10 公路村村通(30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1 ...

  7. PTA 08-图7 公路村村通 (30分)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数NN(\le 1000≤1000)和候选道 ...

  8. PAT 7-14 公路村村通

    https://pintia.cn/problem-sets/1111189748004499456/problems/1111189831248850957 现有村落间道路的统计数据表中,列出了有可 ...

  9. pta 编程题20 旅游规划

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

随机推荐

  1. Entity Framework 分页处理

    在SQL中进行分页,网上已经有很多例子了,在这里我使用Linq to SQL让C#来生成分页代码,首先创建分页的扩展方法: public static class Extensions { /// & ...

  2. @Html.AntiForgeryToken() 源码分析,表单防伪码的生成

    源码来自MVC4@Html.AntiForgeryToken() 源码分析 public MvcHtmlString AntiForgeryToken() { return new MvcHtmlSt ...

  3. Postman使用-2

    转载:https://www.cnblogs.com/yunman/p/7884537.html Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 接口请求流程 一.g ...

  4. C++基础之继承类和派生类

    (1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...

  5. iscsi使用教程(下)

    动态创建目标 安装iscsi服务端 # yum install -y scsi-target-utils.x86_64 修改配置文件 # mkdir -p ~/volumes # sed -i '$ ...

  6. Spark内核概述

    提交Spark程序的机器一般一定和Spark集群在同样的网络环境中(Driver频繁和Executors通信),且其配置和普通的Worker一致 1. Driver: 具有main方法的,初始化 Sp ...

  7. 整合spring和hibernate框架

    一)整合spring和hibernate框架整合要点:(1)数据源配置在Spring的配置文件中,供Spring和Hibernate框架共同使用:(2)不再需要hibernate.hbm.xml配置文 ...

  8. 在 .NET Framework 中使用 StringBuilder 类

    在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ...

  9. 转 mysql 下载 以及安装

    https://blog.csdn.net/kerafan/article/details/78001849 一.MySQL 各个版本区别 ,(都需要编译的 ) 1.MySQL Community S ...

  10. WebSocket协议入门介绍

    目录 目录 WebSocket协议是什么 WebSocket是应用层协议 WebSocket与Http的区别 为什么要使用WebSocket 如何使用WebSocket 客户端API 在客户端使用We ...