POJ 1789
来源:互联网 发布:怎么申请软件专利 编辑:程序博客网 时间:2024/05/16 06:31
题目我咋一看, 觉得有点新颖,后来 读题之后 发现又是 最小生成树的 例子。
题目大意:每条字符串 都可以 由其他的字符串 演化出来。定义两个字符串之间的距离,就是它们之间不同的字符的个数。 要求的是, 如何演化,对应的距离之和 最短,相应的 倒数也就是 最大的。我们知道,最小生成树的权值之和是最短的。
因为这道题,点的范围是 2~2000,并且构成的图 应该是 密集型的,每两个点之间 都会有 边相连,所以我选择 Prim算法
#include <iostream>using namespace std;#define MAX 2010int n;int map[MAX][MAX];int vis[MAX];void Prim(){ int i,j,k,dis[MAX]; k = 0; for(i=0;i<n;i++){ dis[i] = map[0][i]; vis[i] = 0; } for(i=1;i<=n;i++){ int temp = 10; for(j=0;j<n;j++){ if(!vis[j]&&dis[j]<temp){ temp = dis[j]; k = j; } } vis[k] = 1; for(j=0;j<n;j++){ if(!vis[j]&&dis[j]>map[k][j]) dis[j] = map[k][j]; } } for(i=0;i<n;i++) dis[0] += dis[i]; cout<<"The highest possible quality is 1/"<<dis[0]<<"."<<endl;}int main(){ int i,j,k; char str[MAX][7]; while(cin>>n,n){ for(i=0;i<n;i++){ cin>>str[i]; } for(i=0;i<n;i++){ for(j=i;j<n;j++){ int count = 0; for(k=0;k<7;k++){ if(str[i][k]!=str[j][k]) count++; } map[i][j] = map[j][i] = count; } } Prim(); } return 0;}
0 0
- POJ 1789
- POJ 1789
- poj 1789
- poj 1789
- POJ 1789
- poj 1789
- POJ 1789
- POJ 1789
- poj.1789
- POJ 1789
- poj-1789
- poj 1789
- poj 1789
- POJ 1789
- poj 1789
- POJ-1789
- POJ 1789
- POJ 1789
- 各种排序算法的性能
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
- 【easyui】combotree类似combobox模糊查询功能,动态加载数据
- 学习TensorFlow,多层卷积神经网络
- ppt背景
- POJ 1789
- Sql Server 使用脚本对表的列进行操作
- php 数组操作
- 课堂作业9
- 【bzoj1670】[Usaco2006 Oct]Building the Moat护城河的挖掘 求凸包
- Struts2学习笔记(Tags)
- QtQuick获取屏幕信息
- 如何成功制作可执行的Jar包
- hdoj 1872 稳定排序 【判断排序是否稳定】