#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; }一开始觉得怎么找路径的大小,感觉一个个比较很花费时间,事实上就只要暴力就过了。套用模板即可
模板题 Truck History poj1789
猜你喜欢
转载自blog.csdn.net/lirui7610/article/details/80021234
今日推荐
周排行