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

7-10 公路村村通 (30 分)
 

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

输入格式:

输入数据包括城镇数目正整数N(≤)和候选道路数目M(≤);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。

输出格式:

输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−,表示需要建设更多公路。

输入样例:

  1. 6 15
  2. 1 2 5
  3. 1 3 3
  4. 1 4 7
  5. 1 5 4
  6. 1 6 2
  7. 2 3 4
  8. 2 4 6
  9. 2 5 2
  10. 2 6 6
  11. 3 4 6
  12. 3 5 1
  13. 3 6 1
  14. 4 5 10
  15. 4 6 8
  16. 5 6 3
    题目分析:一道图的最小生成树算法的基础题 利用PrimKruskal算法来解决最小生成树问题 稠密图用Prim算法 稀疏图使用Kruskal算法 注意收录顶点在找到后就立刻进行 这样就不会对对角线上的元素进行判断
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<malloc.h>
  5. #define MAXVERTEXNUM 1000
  6. #define INIFITY 65535
  7.  
  8. typedef struct ENode* Edge;
  9. struct ENode
  10. {
  11. int V1, V2;
  12. int Weight;
  13. };
  14.  
  15. typedef struct GNode* Graph;
  16. struct GNode
  17. {
  18. int Nv;
  19. int Ne;
  20. int G[MAXVERTEXNUM][MAXVERTEXNUM];
  21. };
  22.  
  23. Graph BuildGraph(int VertexNum)
  24. {
  25. Graph Gra = (Graph)malloc(sizeof(struct GNode));
  26. Gra->Nv = VertexNum;
  27. Gra->Ne = ;
  28. for(int i=;i<=Gra->Nv;i++)
  29. for (int j = ; j <=Gra->Nv; j++)
  30. {
  31. if (i == j)
  32. Gra->G[i][j] = ;
  33. else
  34. Gra->G[i][j] = INIFITY;
  35. }
  36. return Gra;
  37. }
  38.  
  39. void Insert(Edge E, Graph Gra)
  40. {
  41. Gra->G[E->V1][E->V2] = E->Weight;
  42. Gra->G[E->V2][E->V1] = E->Weight;
  43. }
  44.  
  45. Graph CreateGraph()
  46. {
  47. int N, M;
  48. scanf("%d%d", &N, &M);
  49. Edge E = (Edge)malloc(sizeof(struct GNode));
  50. Graph Gra = BuildGraph(N);
  51. Gra->Ne = M;
  52. for (int i = ; i < M; i++)
  53. {
  54. scanf("%d%d%d", &(E->V1), &(E->V2), &(E->Weight));
  55. Insert(E, Gra);
  56. }
  57. return Gra;
  58. }
  59.  
  60. int IsEdge(Graph Gra, int V, int W)
  61. {
  62. return Gra->G[V][W] < INIFITY;
  63. }
  64.  
  65. int Dist[MAXVERTEXNUM];
  66. int Path[MAXVERTEXNUM];
  67. int Collected[MAXVERTEXNUM];
  68. int Sum;
  69. int FindMin(Graph Gra)
  70. {
  71. int MinDist = INIFITY;
  72. int Min = -;
  73. for (int i = ; i <=Gra->Nv; i++)
  74. if (!Collected[i] && Dist[i] < MinDist)
  75. {
  76. MinDist = Dist[i];
  77. Min = i;
  78. }
  79. return Min;
  80. }
  81. void Prim(Graph Gra,int V)
  82. {
  83. Dist[V] = ;
  84. Path[V] = -;
  85. Collected[V] = ;
  86. for (int i = ; i <= Gra->Nv; i++)
  87. {
  88. Dist[i] = Gra->G[V][i];
  89. Path[i] = V;
  90. }
  91. while ()
  92. {
  93. int Min = FindMin(Gra);
  94. if (Min ==-)
  95. break;
  96. Collected[Min] = ;
  97. Dist[Min] = ;
  98. Sum += Gra->G[Path[Min]][Min];
  99. for (int i = ; i <=Gra->Nv; i++)
  100. {
  101. if (!Collected[i] && IsEdge(Gra, Min, i))
  102. if (Gra->G[Min][i] < Dist[i])
  103. {
  104. Dist[i] = Gra->G[Min][i];
  105. Path[i] = Min;
  106. }
  107. }
  108. }
  109. }
  110.  
  111. int main()
  112. {
  113. Graph Gra = CreateGraph();
  114. Prim(Gra,);
  115. int Flag =;
  116. for (int i = ; i <= Gra->Nv; i++)
  117. if (!Collected[i])
  118. Flag = ;
  119. if (Flag)
  120. printf("%d", Sum);
  121. else
  122. printf("-1");
  123. return ;
  124. }

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

  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. Android开发进阶 -- 通用适配器 CommonAdapter

    在Android开发中,我们经常会用到ListView 这个组件,为了将ListView 的内容展示出来,我们会去实现一个Adapter来适配,将Layout中的布局以列表的形式展现到组件中.     ...

  2. ADO.NET连接数据库DBHelper工具类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. zabbix图表出现中文乱码

    搭建完成Zabbix监控服务器之后,切换到中文语言,图表展示出现乱码,如图所示 按照网上流传的上传windows下的字体的方法,还是不行,最后发现是PHP编译时的问题: php在编译时开启了-enab ...

  4. drf(请求封装/认证/权限/节流)

    1.请求的封装 class HttpRequest(object): def __init__(self): pass @propery def GET(self): pass @propery de ...

  5. Java基础(五):数组

    数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间. 创建一个数组 在Java中,我们可以通过[]去声明一个指定类型的数组 int[] a; // ...

  6. ubutu 12.04

    1.[系统设置]->[外观]->[行为]->[自动隐藏启动器],隐藏左侧边栏后,可以按快捷键[CTRL+a]弹出侧边栏. 2.QtCreator调试,提示[ptrace不允许的操作] ...

  7. Crypto++ 无法解析的外部符号 CryptoPP::AssignIntToInteger

    预处理器定义中添加:CRYPTOPP_NO_ASSIGN_TO_INTEGER 方案出自:https://github.com/weidai11/cryptopp/issues/389

  8. 使用AJAX实现用户名的唯一性校验(注册界面)-JAVA(新手)

    (1)实现用户名的唯一性校验 所需要准备的: Servlet 注册界面的JSP 接口和实现类 所需要的接口和实现类: 接口: /* * 用户注册 * 账号的唯一性校验,需要传参(username) * ...

  9. JDBC链接数据库。

    第一步,创建一个空包: 给包起个名字: 新建Modules: 给Modules起名: 创建libs文件: 点击file---->new---->project---->Directo ...

  10. sql 语句系列(多表之链)[八百章之第三章]

    新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...