模板题 Truck History poj1789

#include <iostream>
#include <string>
#include <cstring>
#define INF 9999999
using namespace std;
int n,sum;
string s[2005];
short book[2001];
int low[2001];
int e[2001][2001];
void prim()
{
    for(int i=1; i<=n; i++)
    {
        low[i]=e[1][i];
        book[i]=0;
    }
    book[1]=1;
    int k;
    for(int i=1; i<=n; i++)
    {
        int min1=999999;


        for(int j=1; j<=n; j++)
        {
            if(low[j]<min1&&!book[j])
            {
                min1=low[j];
                k=j;
            }
        }
        if(min1==999999) break;//要break 否则多了不必要的步骤
        sum+=min1;
        book[k]=1;


        for(int f=1; f<=n; f++)
        {
            if(!book[f]&&low[f]>e[k][f])
            {


                low[f]=e[k][f];


            }
        }
    }
}


int main()
{

    while(cin>>n)
    {
        if(n==0) break;

        for(int i=1; i<=n; i++)
        {
            cin>>s[i];
        }
        sum=0;
        for(int i=1; i<=n; i++)
        {

            for(int k=1; k<=n; k++)
            {

                int count=0;
                for(int j=0; j<s[k].length(); j++)
                {
                    if(s[i][j]!=s[k][j])
                    {
                        count++;
                    }
                }
                e[i][k]=e[k][i]=count;
            }

        }
        prim();
        cout<<"The highest possible quality is 1/"<<sum<<"."<<endl;
    }

    return 0;
}
一开始觉得怎么找路径的大小,感觉一个个比较很花费时间,事实上就只要暴力就过了。套用模板即可

猜你喜欢

转载自blog.csdn.net/lirui7610/article/details/80021234
今日推荐