prim和kruskal都是求解最小生成树的算法。这道题题意就是有N个字符串就是N个节点,而字符串之间的距离就是节点边的长度,求其最小生成树的边权和。

由于是第一次用prim,所以在求安全边的时候采用的是暴力的方法,所以我这个算法是O(n^2)的,跑了近1500ms,吓出一身冷汗……如果采用优先队列或者堆等数据结构应该会快,但是代码也会相应复杂了。

#include <iostream>
#include <string>
using namespace std;int n;
string str[2001];
int dis[2001][2001];
int key[2001];
bool visited[2001];const int LEN = 7;int calDis(string str1, string str2)
{int ans = 0;for (int i = 0; i < LEN; i++){if (str1[i] != str2[i]){ans++;}}return ans;
}int prime()
{int sum = 0;visited[0] = true;for (int i = 0; i < n; i++){key[i] = dis[0][i];}for (int i = 1; i < n; i++){int min = 100;int index = 0;for (int j = 0; j < n; j++){if (!visited[j] && key[j] < min){index = j;min = key[j];}}visited[index] = true;sum += key[index];for (int j = 0; j < n; j++){if (!visited[j] && dis[index][j] < key[j]){key[j] = dis[index][j];}}}return sum;
}int main()
{while (cin >> n && n){memset(dis, 0, sizeof(dis));memset(key, 0, sizeof(key));memset(visited, 0, sizeof(visited));for (int i = 0; i < n; i++){cin >> str[i];}for (int i = 0; i < n; i++){for (int j = i; j < n; j++){int tmpDis = calDis(str[i], str[j]);dis[i][j] = tmpDis;dis[j][i] = tmpDis;}}cout << "The highest possible quality is 1/" << prime() << '.' << endl;}return 0;
}

转载于:https://www.cnblogs.com/caiminfeng/p/4915365.html

poj1789(prim)相关推荐

  1. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  2. 基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)

    #include <iostream> using namespace std; //约定: //1. 图是由很多节点(VERTEX)构成的, 因此图结构是由一个VERTEX的链表构成的, ...

  3. 技术图文:如何利用C# 实现 Prim 最小生成树算法?

    背景 我们上一篇图文介绍了 如何利用 C# 实现 Kruskal 最小生成树算法?,Kruskal 算法通过寻找边最优的方式来构造最小生成树,本篇图文介绍如何利用 C# 实现 Prim 最小生成树算法 ...

  4. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  5. HDU1102(Prim算法)

    这道题附加了一个条件是:最后给出q行,代表这两个村庄是通路的,所以可以将其权值赋值为零. #include<iostream> #include<algorithm> #inc ...

  6. HDU1162(Prim算法)

    方法一:Prim #include<iostream> #include<algorithm> #include<cstring> #include<ioma ...

  7. HDU1863(Prim算法)

    方法一:Prim算法 #include<iostream> #include<algorithm> #include<cstring> #include<ve ...

  8. 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)

    整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...

  9. P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐

    题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...

最新文章

  1. HDU-1394-Minimum Inversion Number
  2. jittor和pytorch生成网络对比之esrgan
  3. 震惊!html文件注释也会影响运行代码!(werkzeug.routing.BuildError: Could not build url for endpoint)莫名其妙
  4. Altium Designer 18 怎么导出CAD文件
  5. 敲代码4年,发现C语言里几个有意思的问题
  6. 为什么用自己的电脑部署服务器之后外网访问不到呢?并且该如何解决这个问题呢?...
  7. Ubuntu: 搭建tftp,nfs服务器
  8. ubuntu环境下,ubuntu16.04装机到nvdia显卡驱动安装、cuda8安装、cudnn安装
  9. JavaSE基础——反射
  10. 安卓EventBus的使用方法
  11. 手机摄像头改笔记本外接摄像头
  12. 过程FMEA步骤四:失效分析(一)
  13. SCI/SCIE/SSCI/期刊简介及官方查询验证方法
  14. linux微软雅黑字体库_Ubuntu 安装 Wine 4.4 并设置微软雅黑字体解决中文乱码
  15. LaTex 插入图像
  16. 实在抵不住张老师的诱惑,又跳坑了
  17. java tea collection_Javaの集合学习
  18. 2020-12 补丁日: 微软多个高危漏洞通告
  19. 中国书法名词解释大全
  20. String.contains()方法

热门文章

  1. 排序方法分析与代码实现
  2. C语言中用栈实现进制转换,利用栈实现进制转换问题
  3. linux显示存储与标定不符,找到了linux分区顺序错乱修复方法
  4. C语言程序设计省二考试,浙江省高校计算机等级考试大纲(二级——C语言程序设计大纲)(...
  5. 怎么在mac下运行映像dmg_仅用Mac OS X系统映像文件(dmg)安装系统
  6. 小米6通话音量补丁_智能手机的音量键有很多功能,你用过吗?
  7. 【教程】Linux 下软 RAID 实现方案!!
  8. oracle tax 中国税,oracle_TAX_税基础设置操作手册.doc
  9. c语言程序 实现简单计算器功能,C语言实现简单计算器小项目
  10. 查询过去一个月有付款mysql_MySQL_mysql 月份查询该月有付款的数据,ktime 开始时间串 dtime 到期时间 - phpStudy...