题意:
n个车牌号,刚开始只有一个车牌,其他车牌都是由一个车牌直接或间接产生,一个车牌到另一个车牌的产生权值是它们之间的数字不同的个数,问产生的最小的边权和,即求最小生成树

Input:
多组数据。第一行一个数字n,车牌数量,接下来n行为车牌序列。输入0结束。

Output:
每组数据输出一行
“The highest possible quality is 1/Q”。Q是最佳推导计划的质量

思路:
把给出的车牌序列,想象成一个二维数组。要得到edge边里的权重,就需要获得车牌间两两转换的权重。所以使用两重循环来计算两两间的权重。而,权重即为两个7个字母的车牌序列之间 不一样的字母个数

Kruskal

//Kruskal:
#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
const int maxn = 2010;struct edge
{int u, v, w;
};
bool cmp(edge a, edge b)
{return a.w < b.w;
}int n;
int par[maxn];
edge a[maxn * maxn / 2];
int cnt = 0;int ans = 0;int find(int x)
{if (par[x] == x)return par[x];return par[x] = find(par[x]);
}void initilize()
{cnt = 0;ans = 0;for (int i = 0; i <= n; i++)par[i] = i;
}int main()
{while (cin >> n){if (n == 0)break;initilize();string str[maxn];for (int i = 0; i < n; i++)cin >> str[i];//把给出的车牌序列,想象成一个二维数组//要得到edge边里的权重,就需要获得车牌间两两转换的权重//所以使用两重循环来计算两两间的权重//而,权重即为两个7个字母的车牌序列之间 不一样的字母个数for (int i = 0; i <= n - 1; i++){for (int j = n - 1; j >= i; j--){int get_weight = 0;for (int k = 0; k < 7; k++){if (str[i][k] != str[j][k])get_weight++;}a[cnt].u = i;a[cnt].v = j;a[cnt].w = get_weight;cnt++;}}sort(a, a + cnt, cmp);for (int i = 0; i < cnt; i++){int x = find(a[i].u);int y = find(a[i].v);if (x != y){par[y] = x;ans += a[i].w;}}cout << "The highest possible quality is 1/" << ans << "." << endl;/*for (int i = 0; i <= n; i++)cout << par[i] << " ";cout << endl;for (int i = 0; i < cnt; i++)cout << a[i].u << " " << a[i].v << " " << a[i].w << endl;*/}return 0;
}

Prim:

//Prim:
#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<cmath>
#include<ctype.h>
#include<memory.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<iomanip>
#include<set>
#include<list>
#include<vector>
#include<stack>
#include<queue>
#define ll long long int
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 2010;int n;
int Map[maxn][maxn];
int dis[maxn];
int vis[maxn];int prim(int s)
{int ans = 0;memset(vis, 0, sizeof(vis));for (int i = 1; i <= n; i++)dis[i] = Map[i][s];for (int i = 1; i <= n; i++){int Min = INF;int min_index = -1;for (int j = 1; j <= n; j++){if (dis[j] < Min && !vis[j]){Min = dis[j];min_index = j;}}if (min_index != -1)vis[min_index] = 1;ans += Min;for (int j = 1; j <= n; j++)if (dis[j] > Map[j][min_index])dis[j] = Map[j][min_index];}return ans;
}int main()
{while (cin >> n){if (n == 0)break;string str[maxn];for (int i = 1; i <= n; i++)cin >> str[i];/*cout << "hello" << endl;for (int i = 1; i <= n; i++){for (int j = 0; j < 7; j++)cout << str[i][j];cout << endl;}*/for (int i = 1; i <= n; i++){for (int j = n; j >= i; j--){int get_weight = 0;for (int k = 0; k < 7; k++)if (str[i][k] != str[j][k])get_weight++;Map[i][j] = Map[j][i] = get_weight;}}int ans = prim(1);cout << "The highest possible quality is 1/" << ans << "." << endl;}return 0;
}

poj 1789 TruckHistory 最小生成树 Kruskal、Prim相关推荐

  1. poj 1287 Networking 最小生成树 Kruskal Prim

    关于Kruskal和Prim在前面已经有详细的解释以及模板了 有关于需要注意的地方,以及在代码中注释出来. //Kruskal //用结构体保存起始点以及耗费,然后排序后,根据Kruskal #inc ...

  2. * poj 1251 JungleRoad 最小生成树 Kruskal算法、Prim算法

    文章目录 Kruskal算法 模板:https://blog.csdn.net/Rain722/article/details/65642992 Prim算法 模板: poj 1251 JungleR ...

  3. poj 3026 BorgMaze 最小生成树Kruskal、Prim(Prim VS报错待解决

    题意 以及 思路: 从S点有一伙人出发去消灭A点的敌人,在S点或者A点可以分裂成几个小队然后分别走,这样路径=总队路径+各个小队路径 问你怎样路径最短. 在一个y行 x列的迷宫中,有可行走的通路空格' ...

  4. poj 1679 TheUniqueMST 最小生成树Kruskal(、Prim待做

    题意: 给定连接的无向图,告诉它的最小生成树是否唯一. 定义1(生成树):考虑连通的无向图G =(V,E).G的生成树是G的子图,比如T =(V',E'),具有以下属性: 1.V'= V. 2.T是连 ...

  5. poj 2439 ArcticNetwork 最小生成树Kruskal、(Prim方法还没做

    题意思路: https://www.cnblogs.com/yueshuqiao/archive/2011/08/24/2152471.html Kruskal: 参考大佬的代码: 法一 法二 #pr ...

  6. poj 1751 Highways 最小生成树Kruskal(、Prim还没写

    OJ交不了,,, #pragma warning(disable:4996) #include<iostream> #include<string> #include<c ...

  7. POJ 1789(最小生成树)

    这题要把给的字符串变成边的权值 #include <cstdio> #include <iostream> #include <queue> #include &l ...

  8. #最小生成树,prim,kruskal#poj 2560 Freckles 雀斑

    题目 求最小生成树 分析 prim & kruskal Kruskal代码 #include <cstdio> #include <cmath> #include &l ...

  9. Kuskal/Prim POJ 1789 Truck History

    题目传送门 题意:给出n个长度为7的字符串,一个字符串到另一个的距离为不同的字符数,问所有连通的最小代价是多少 分析:Kuskal/Prim: 先用并查集做,简单好写,然而效率并不高,稠密图应该用Pr ...

最新文章

  1. mysql中group concat_mysql中group_concat()函数的使用方法总结
  2. 为何大多数人做出来的图表只是一坨屎?
  3. c语言一位共阳数码管编程,求一个共阳四位数码管滚动显示1234的程序
  4. 48天打造你的专属 Twilio——浅谈运营商通信中台
  5. python画网络关系 节点和边存在文件里_python复杂网络分析库NetworkX
  6. FileZilla搭建FTP服务器图解教程
  7. vue2.0 路由不显示router-view
  8. free,ps,抓包,网络状态
  9. java eclipse profile_在 Eclipse 中集成JProfiler 进行 JAVA 项目性能分析
  10. 数据结构笔记(三十一)--折半查找
  11. mysql怎么切换用户_DB2迁移到Mysql
  12. cad画流程图的插件_如何用cad画交互流程图
  13. 康托展开、康托逆展开原理
  14. 为了永不停机的计算服务 | 凌云时刻
  15. mysql类目树关系的保存和全排列查询
  16. Windows---命令打开截图工具,.bat文件执行
  17. 327 玉米田(状态压缩dp)
  18. [高通SDM450][Android9.0]外接键盘闪屏以及默认使用虚拟键盘
  19. 史上最详细的新浪广告系统技术架构优化历程
  20. jstat -gcutil 输出结果分析_助你了解jvm命令,查找JVM堆栈信息,分析性能问题

热门文章

  1. stun服务器搭建(coTurn)
  2. 详细了解为什么支持Postman Chrome应用程序已被弃用?
  3. hibernate之一对一
  4. Missing iOS Distribution signing identity问题解决
  5. linux加protobuf变量环境,protobuf简单介绍和ubuntu 16.04环境下安装教程
  6. rtt面向对象oopc——5.IO设备管理之快速查看设备父类调用设备子类的方法
  7. 贪心——区间选点问题(用最少数量的箭引爆气球 Leetcode 452)
  8. http post请求 参数放在路径后面 java_【思唯网络学院】网络基本概念之HTTP协议...
  9. MySQLBackup 8.0.26 备份与恢复
  10. 关于MySQL内存泄露如何排查的一些思路