poj1789 Truck History

链接: http://poj.org/problem?id=1789 
题意: 这个题的题意看英文那真的怎么也看不懂啊。哎,只能说英文水准还不够啊。关键的一句:They defined the distance of truck types as the number of positions with different letters in truck type codes. (看不懂这句,这题就没法做。)关键意思是说:distance定义为两个卡车code之间每个相同位置letter不同的个数。例如:aaaaaaa和abcdefg的distance为6。懂了这个题目就好做了。题目本身很简单。
用prim就可以过了,适合像我这样的新手入门。最好再把kruskal的写一遍。这样就好了。
浅谈:略。
#include<iostream>
#include<cstring>
#define MAX 2010
#define MAXdis 10
using namespace std;
struct truck
{
  char code[8];
};
truck tr[MAX];
int lowcost[MAX];
int closest[MAX];
int N;
int check(int m,int n)
{
  if(m==n)return 0;
  int i,differ=0;
  for(i=0;i<7;i++)
	if(tr[m].code[i]!=tr[n].code[i])
		differ++;
   return differ;
}
int Prim()
{
  int i,j,mindis,minone;
  int ans=0;
  for(i=1;i<=N;i++)
  {
    lowcost[i]=check(1,i);
	closest[i]=1;
  }
  for(i=0;i<N-1;i++)
  {
    mindis=MAXdis;
    for(j=1;j<=N;j++)
	  if(lowcost[j]&&mindis>lowcost[j])
	  {
	     mindis=lowcost[j];
		 minone=j;
	  }
	  ans+=lowcost[minone];
	  lowcost[minone]=0;
	  for(j=1;j<=N;j++)
	  {
		int differ=check(j,minone);
		if(differ<lowcost[j])
		{
		  lowcost[j]=differ;
		  closest[j]=minone;
		}
	  }
  }
  return ans;
}
int main()
{
	int n,i;
	char code[8];
	while(cin>>n&&n)
	{
	  N=n;
	  for(i=1;i<=n;i++)
	  {
	    cin>>code;
		strcpy(tr[i].code,code);
	  }
	  cout<<"The highest possible quality is 1/"<<Prim();
	  cout<<"."<<endl;
	}
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值