prime算法 poj1789

来源:互联网 发布:科比生涯场均数据 编辑:程序博客网 时间:2024/05/01 01:46

题意描述:一个字符串代表一个卡车类型,其中字符串中字符不同的个数代表两辆卡车的距离,然后让你找到最小值使得所有卡车的距离最小,最小生成树!

#include<iostream>#include<string>using namespace std;typedef struct fun{char s[8];}rr;fun a[2005];bool vis[2005];int n,sum;int distance(int i,int j){int k,m=0;for(k=0; k<7; k++)if(a[i].s[k]!=a[j].s[k])m++;return m;}void prime(){int dis[2005],i,j;    vis[0]=true;dis[0]=0;for(i=1; i<n; i++)  dis[i]=distance(0,i);//获得的是每个到开始的结点的距离的for(j=1; j<n; j++){int min=INT_MAX,jilu;for(i=0; i<n; i++){if(dis[i]< min && vis[i]==false)//是可以进行的换的{jilu=i;min=dis[i];}}sum+=min;vis[jilu]=true;for(i=0; i<n; i++)if(vis[i]==false){int t=distance(jilu,i);dis[i]=dis[i]<t?dis[i]:t;}}}int main(){int i,j;while(1){cin>>n;if(n==0)break;sum=0;for(i=0; i<n; i++){scanf("%s",a[i].s);vis[i]=false;}prime();cout<<"The highest possible quality is 1/"<<sum<<"."<<endl;}return 0;}


 

原创粉丝点击