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

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

#include <iostream>
#include <string>
using namespace std; int n;
string str[];
int dis[][];
int key[];
bool visited[]; const int LEN = ; int calDis(string str1, string str2)
{
int ans = ;
for (int i = ; i < LEN; i++){
if (str1[i] != str2[i]){
ans++;
}
}
return ans;
} int prime()
{
int sum = ;
visited[] = true;
for (int i = ; i < n; i++){
key[i] = dis[][i];
}
for (int i = ; i < n; i++){
int min = ;
int index = ;
for (int j = ; j < n; j++){
if (!visited[j] && key[j] < min){
index = j;
min = key[j];
}
}
visited[index] = true;
sum += key[index];
for (int j = ; 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, , sizeof(dis));
memset(key, , sizeof(key));
memset(visited, , sizeof(visited));
for (int i = ; i < n; i++){
cin >> str[i];
}
for (int i = ; 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 ;
}

最新文章

  1. ToolsCodeTemplate使用
  2. Log4J基础详解及示例大全
  3. myBatis foreach详解【转】
  4. 拷贝Java项目报错
  5. LoadRunner中web_custom_request 和 web_submit_data的差别
  6. ArcGIS学习记录-Excel和Txt中XY点数据生成点Shape文件方法
  7. 通过本地加载ga.js文件提高Google Anlytics性能
  8. Java-jfree报表(学习整理)----饼状图、柱状图、折线统计图
  9. shell惊鸿
  10. MVC自定义AuthorizeAttribute实现权限管理
  11. 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
  12. map 类型
  13. Weblogic的集群
  14. bzoj 4012: [HNOI2015]开店
  15. DT_修改注册项
  16. 2015 多校联赛 ——HDU5386(暴力)
  17. bootstrap模态框关闭后清除模态框的数据
  18. CY7C68013 USB接口相机开发记录 - 第三天:固件修改
  19. 【2015 软件工程 个人项目 PJ1】四则运算题目生成程序
  20. C语言记录汇总

热门文章

  1. bzoj 1455: 罗马游戏
  2. Centos tomcat jmx 远程连接
  3. 【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
  4. Tomcat面试题目
  5. Hibernate总结之Hello,World
  6. 【C++自我精讲】基础系列六 PIMPL模式
  7. Linux线程编程之生产者消费者问题【转】
  8. 94.Binary Tree Inorder Traversal---二叉树中序非递归遍历
  9. linux动态库编译和使用详细剖析 - 后续
  10. selenium滚动到顶部与底部