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

题目

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

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

 #include <iostream>
using namespace std; int N, M;
int** G;
void buildGraph();
void deleteGraph();
int prim();
int findMinDist(int dist[]); int main()
{
cin >> N >> M;
buildGraph();
cout << prim();
deleteGraph();
return ;
} void buildGraph()
{
int i, j;
G = new int*[N];
for (i = ; i < N; i++)
{
G[i] = new int[N];
for (j = ; j < N; j++)
G[i][j] = INT_MAX;
} int v, w, d;
for (i = ; i < M; i++)
{
cin >> v >> w >> d;
v--; w--;//输入从1计数
G[v][w] = d;
G[w][v] = d;
}
} void deleteGraph()
{
for (int i = ; i < N; i++)
delete[] G[i];
delete[] G;
} int findMinDist(int dist[])
{ /*返回未收录进MST的顶点中dist最小的顶点*/
int minV, v;
int minDist = INT_MAX;
for (v = ; v < N; v++)
{
if (dist[v] != && dist[v] < minDist)
{
minDist = dist[v];
minV = v;
}
}
if (minDist < INT_MAX)
return minV;
return -;
} int prim()
{ /*返回最小生成树的权重*/
int v, w, vCount = ;
int totalWeight = ;
int* dist = new int[N]; /*初始化,初始点下标为0*/
for (v = ; v < N; v++)
dist[v] = G[][v]; /*将0收进最小生成树MST*/
dist[] = ;
vCount++; while (true)
{
v = findMinDist(dist);
if (v == -)
break; totalWeight += dist[v];
dist[v] = ; //收录v
vCount++; for (w = ; w < N; w++)
{
/*如果w没有被收录*/
if (dist[w] != && G[v][w] < dist[w])
{
dist[w] = G[v][w];
}
}
} delete[] dist; if (vCount < N)
return -;
return totalWeight;
}

最新文章

  1. JavaScript模板引擎artTemplate.js——是否编码输出html字符
  2. 关于如何通过json更改背景图片
  3. 2014年物联网Internet of Things应用简介
  4. java中i=i++字节码分析
  5. [WebService] the namespace on the &quot;definitions&quot; element, is not a valid SOAP version
  6. CentOS 7安装Mysql并设置开机自启动
  7. ajax利用json进行服务器与客户端的通信
  8. ECC中的CRM UI端摆弄
  9. PhpStorm WebMatrix xDebug 配置开发环境
  10. My集合框架第一弹 LinkedList篇
  11. Java程序员的发展前景
  12. oracle AWR深入研究分析,如何使用
  13. [C#错误] 未找到类型或命名空间名称&quot; &quot; (是否缺少 using 指令或程序集引用?)
  14. JDK1.5-1.7的特性
  15. SSH命令行管理文件
  16. PythonStudy——流程控制 Process control
  17. Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法
  18. 从零开始的Python学习Episode 18——面向对象(1)
  19. WIN8+VS2013编写发布WCF、一(编写)、二(部署)、三(调用)
  20. My97DatePicker日历控件在iframe提示没有权限的问

热门文章

  1. 【转】log4j.properties 详解与配置步骤 - edward0830ly的专栏 - 博客频道 - CSDN.NET
  2. ASP.NET CORE系列【四】基于Claim登录授权
  3. file控件选择图片,img即可显示(无需上传)
  4. nfs使用教程
  5. OpenStack基础知识-virtualenv工具详解
  6. java 提取(解压)rar文件中特定后缀的文件并保存到指定目录
  7. 测试之美 Part 1
  8. iOS端实现节日换肤
  9. Android Studio模拟器的root权限
  10. Chapter11