您的位置:首页 > 其它

poj1789Truck History(简单最小生成树)

2012-08-06 20:04 211 查看
http://poj.org/problem?id=1789

模板题 题意是一个字符串跟一个字符不同的字符串有多少 这个数量就相当于权值 连起来最小

View Code

#include <iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#define INF 0x3f3f3f3f
using namespace std;
char c[2001][10];
int w[2001][2001],vis[2001],low[2001],s;
void prime(int n)
{
int i,j,k,m;
memset(vis,0,sizeof(vis));
vis[1] = 1;
for(i =2 ; i <= n ; i++)
low[i] = w[1][i];
for(i = 1; i <= n ; i++)
{
m = INF;
for(j = 1; j <= n ; j++)
if(!vis[j]&&low[j]<m)
m = low[k=j];
if(m==INF)
break;
s+=m;
vis[k] = 1;
for(j = 1; j <= n ; j++)
if(!vis[j]&&low[j]>w[k][j])
low[j] = w[k][j];
}
}
int main()
{
int i,j,k,n,m,y,x;
while(scanf("%d%*c",&n)&&n)
{
memset(w,INF,sizeof(w));
s = 0;
for(i = 1; i <= n ; i++)
{
gets(c[i]);
}
for(i = 1; i <= n ; i++)
{
for(j = i+1; j <= n ; j++)
{
y = 0;
for(x = 0 ; x < 7 ; x++)
if(c[j][x]!=c[i][x])
y++;
if(w[i][j]>y)
{
w[i][j] = y;
w[j][i] = y;
}
}
}
prime(n);
printf("The highest possible quality is 1/%d.\n",s);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: