您的位置:首页 > 其它

poj 1789 Truck History

2012-08-04 10:32 274 查看
prim求最小生成树。

#include<stdio.h>
#include<string.h>
#define INF 100000000
#define MAXN 2100

int n, v[MAXN], low[MAXN], d[MAXN][MAXN];
char s[MAXN][10];

void prim()
{
int ans = 0;
memset(v, 0, sizeof(v));
v[0] = 1;
for(int i = 1; i < n; i ++) low[i] = d[0][i];
for(int i = 1; i < n; i ++)
{
int min = INF, p;
for(int j = 0; j < n; j ++)
if(!v[j] && min > low[j]) min = low[p=j];
ans += min;
v[p] = 1;
for(int j = 0; j < n; j ++)
if(!v[j] && low[j] > d[p][j]) low[j] = d[p][j];
}
printf("The highest possible quality is 1/%d.\n",ans);
}
void init()
{
while(scanf("%d",&n))
{
if(n == 0) break;
for(int i = 0; i < n; i ++)
scanf("%s",s[i]);
for(int i = 0; i < n; i ++)
{
for(int j = i+1; j < n; j ++)
{
int t = 0;
for(int k = 0; k < 7; k ++)
if(s[i][k] != s[j][k]) t ++;
d[i][j] = t;
d[j][i] = t;
}
}
prim();
}
}
int main()
{
init();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: