每天进步一点点~
今天写的是poj1789
题目的大致意思是:
给很多个长度为7的字符串,判断字符串的最小衍生数
使用的是prime算法
#define LOCAL
#include <stdio.h>
#include <string.h>
#define MAXN 2000 + 10
#define MAXL 7+10
char truckTypes[MAXN][MAXL];
int visit[MAXN];
int distance[MAXN];
int disit(char *arg1, char *arg2)
{
int dif = 0;
for(int i = 0; i < 7; i++)
{
if(arg1[i] != arg2[i])
dif++;
}
return dif;
}
int main()
{
#ifdef LOCAL
freopen("C:\\Users\\Administrator\\Desktop\\ACMTempIn.txt", "r", stdin);
freopen("C:\\Users\\Administrator\\Desktop\\ACMTempOut.txt", "w", stdout);
#endif
int row;
int i,j,k,v,min,result = 0;
while(scanf("%d", &row) && row != 0)
{
result = 0;
k = 0;
memset(truckTypes, 0, sizeof(truckTypes));
memset(visit, 0, sizeof(visit));
memset(distance, 0, sizeof(distance));
for(i = 0; i < row; i++)
{
scanf("%s", truckTypes[i]);
}
visit[0] = true;
//初始化distance数组
for(i = 0; i < row; i++)
{
distance[i] = disit(truckTypes[0],truckTypes[i]);
}
//选择在distance中的最短路径
for(i = 1; i < row; i++)
{
min = 9;
for(j = 1; j < row; j++)
{
if(visit[j] == false && distance[j] < min)
{
min = distance[j];
v = j;
}
}
visit[v] = true;
result += min;
//更新distance结果集
for(j = 0;j < row; j++)
{
k = disit(truckTypes[v], truckTypes[j]);
if(visit[j] == false && distance[j] > k)
distance[j] = k;
}
}
printf("The highest possible quality is 1/%d.\n", result);
}
return 0;
}