poj 1789 Truck History(prim模板题)

来源:互联网 发布:新手开淘宝 编辑:程序博客网 时间:2024/06/18 12:08
//n个字符串 由任意一个转化为另一个 // 全部转化需要的最小操作数为分子  即代码中的sum# include <stdio.h># include <algorithm># include <math.h>using namespace std;# define inf 0x7fffffffint dis[2010][2010];int n;void prim()//prim模板{int i,min_i,min,j,vis[2010],low[2010],sum;for(i=0;i<n;i++)low[i]=dis[i][0];memset(vis,0,sizeof(vis));vis[0]=1;sum=0;for(i=1;i<n;i++){min_i=i;min=inf;for(j=1;j<n;j++){if(!vis[j]&&low[j]<min)//先找与0相连里的最短距离{min=low[j];min_i=j;}}if(min==inf)break;sum+=min;vis[min_i]=1;for(j=1;j<n;j++){if(!vis[j]&&low[j]>dis[min_i][j])//在0和与好到的min_i点中取最短的low[]low[j]=dis[min_i][j];}}printf("The highest possible quality is 1/%d.\n",sum);//注意末尾句号}int main(){char a[2010][10];int a1[2010][10];int i,j,k;while(~scanf("%d",&n),n){for(i=0;i<n;i++){scanf("%s",a[i]);    for(k=0;k<7;k++){a1[i][k]=a[i][k]-'a';}}  memset(dis,0,sizeof(dis));for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){for(k=0;k<7;k++)if(a1[i][k]!=a1[j][k])//不相等 dis++//一次变化一个位置dis[i][j]++;dis[j][i]=dis[i][j];}}prim();}return 0;}

0 0