poj1789--prim

来源:互联网 发布:广电网络机顶盒价格 编辑:程序博客网 时间:2024/05/18 06:19


每天进步一点点~

今天写的是poj1789

题目的大致意思是:

给很多个长度为7的字符串,判断字符串的最小衍生数

使用的是prime算法

#define LOCAL#include <stdio.h>#include <string.h>#define MAXN 2000 + 10#define MAXL 7+10char 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;}
原创粉丝点击