poj1789(prim)
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)相关推荐
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- 基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)
#include <iostream> using namespace std; //约定: //1. 图是由很多节点(VERTEX)构成的, 因此图结构是由一个VERTEX的链表构成的, ...
- 技术图文:如何利用C# 实现 Prim 最小生成树算法?
背景 我们上一篇图文介绍了 如何利用 C# 实现 Kruskal 最小生成树算法?,Kruskal 算法通过寻找边最优的方式来构造最小生成树,本篇图文介绍如何利用 C# 实现 Prim 最小生成树算法 ...
- 【数据结构】最小生成树 Prim算法 Kruskal算法
最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...
- HDU1102(Prim算法)
这道题附加了一个条件是:最后给出q行,代表这两个村庄是通路的,所以可以将其权值赋值为零. #include<iostream> #include<algorithm> #inc ...
- HDU1162(Prim算法)
方法一:Prim #include<iostream> #include<algorithm> #include<cstring> #include<ioma ...
- HDU1863(Prim算法)
方法一:Prim算法 #include<iostream> #include<algorithm> #include<cstring> #include<ve ...
- 最小生成树(kruskal、prim、最小生成森林问题、严格次小生成树)
整理的算法模板合集: ACM模板 目录 一.kruskal算法 二.prim算法 三.Boruvka算法 四.生成森林问题(K颗树) 五.最小生成树的唯一性 六.严格次小生成树 LCA优化的次小生成树 ...
- P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐
题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...
最新文章
- HDU-1394-Minimum Inversion Number
- jittor和pytorch生成网络对比之esrgan
- 震惊!html文件注释也会影响运行代码!(werkzeug.routing.BuildError: Could not build url for endpoint)莫名其妙
- Altium Designer 18 怎么导出CAD文件
- 敲代码4年,发现C语言里几个有意思的问题
- 为什么用自己的电脑部署服务器之后外网访问不到呢?并且该如何解决这个问题呢?...
- Ubuntu: 搭建tftp,nfs服务器
- ubuntu环境下,ubuntu16.04装机到nvdia显卡驱动安装、cuda8安装、cudnn安装
- JavaSE基础——反射
- 安卓EventBus的使用方法
- 手机摄像头改笔记本外接摄像头
- 过程FMEA步骤四:失效分析(一)
- SCI/SCIE/SSCI/期刊简介及官方查询验证方法
- linux微软雅黑字体库_Ubuntu 安装 Wine 4.4 并设置微软雅黑字体解决中文乱码
- LaTex 插入图像
- 实在抵不住张老师的诱惑,又跳坑了
- java tea collection_Javaの集合学习
- 2020-12 补丁日: 微软多个高危漏洞通告
- 中国书法名词解释大全
- String.contains()方法
热门文章
- 排序方法分析与代码实现
- C语言中用栈实现进制转换,利用栈实现进制转换问题
- linux显示存储与标定不符,找到了linux分区顺序错乱修复方法
- C语言程序设计省二考试,浙江省高校计算机等级考试大纲(二级——C语言程序设计大纲)(...
- 怎么在mac下运行映像dmg_仅用Mac OS X系统映像文件(dmg)安装系统
- 小米6通话音量补丁_智能手机的音量键有很多功能,你用过吗?
- 【教程】Linux 下软 RAID 实现方案!!
- oracle tax 中国税,oracle_TAX_税基础设置操作手册.doc
- c语言程序 实现简单计算器功能,C语言实现简单计算器小项目
- 查询过去一个月有付款mysql_MySQL_mysql 月份查询该月有付款的数据,ktime 开始时间串 dtime 到期时间 - phpStudy...