POJ 1789 Truck History
2013-09-01 22:11
351 查看
题目:
输入T组数据,每组数据由7个小写字母组成,代表着一种卡车的编号,当T==0时,结束程序。
其实就是每组数据相当于一个顶点,每两个顶点之间的边的权值就是这两组数组的字母不同的个数。
如(1)aaaaaaaa、(2)baaaaaa;那么1-->2和2-->1的权值就为1。
题目是要你找出一棵树,使得这颗树的权值最小,计算出权值Q。
输出:The highest possible quality is 1/Q.
分析:最小生成树问题,Prim。。
输入T组数据,每组数据由7个小写字母组成,代表着一种卡车的编号,当T==0时,结束程序。
其实就是每组数据相当于一个顶点,每两个顶点之间的边的权值就是这两组数组的字母不同的个数。
如(1)aaaaaaaa、(2)baaaaaa;那么1-->2和2-->1的权值就为1。
题目是要你找出一棵树,使得这颗树的权值最小,计算出权值Q。
输出:The highest possible quality is 1/Q.
分析:最小生成树问题,Prim。。
//15592K 344MS #include <stdio.h> #define N 2001 #define MAX 8 #define bool char #define true 1 #define false 0 char str [8] ; bool flag ; int low_dis ; //用low_dis数组存贮当前点s到其它点(不包括已经在最小生成树中的)的权值 int dis_betw ; //存储i,j两点间的权值 int Weight ( int const i , int const j ) { int count ; count = 0 ; int k ; for ( k = 0 ; k < 7 ; k ++ ) { if ( str[i][k] != str[j][k] ) { count ++ ; } } return count ; } void Init_Arrays ( int a[] , int num ) { int i ; for ( i = 0 ; i < N ; i ++ ) { a[i] = num ; } } void Init_Flag ( ) { int i ; for ( i = 0 ; i < N ; i ++ ) { flag[i] = 0 ; } } int Prim ( int const n ) { Init_Flag ( ) ; Init_Arrays ( low_dis , MAX ) ; int s ; s = 1 ; int m ; m = 1 ; int new_weight ; int new_point ; int prim_weight ; prim_weight = 0 ; while ( m < n ) { new_weight = MAX ; int i ; for ( i = 2 ; i <= n ; i ++ ) { if ( 0 == flag[i] && low_dis[i] > dis_betw[s][i] ) { low_dis[i] = dis_betw[s][i] ; } if ( 0 == flag[i] && new_weight > low_dis[i] ) { new_weight = low_dis[i] ; new_point = i ; } } s = new_point ; flag[s] = 1 ; prim_weight += new_weight ; m ++ ; } return prim_weight ; } int main ( ) { int n ; while ( EOF != scanf ("%d" , & n ) ) { if ( 0 == n ) { break ; } int i ; for ( i = 1 ; i <= n ; i ++ ) { scanf ("%s" , str[i] ) ; } for ( i = 1 ; i <= n - 1 ; i ++ ) { int j ; for ( j = i + 1 ; j <= n ; j ++ ) { dis_betw[i][j] = dis_betw[j][i] = Weight ( i , j ) ; } } printf ("The highest possible quality is 1/%d.\n" , Prim(n) ) ; } return 0 ; }
相关文章推荐
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History 最小生成树 prim
- poj1789——Truck History(最小生成树+prim)
- poj 1789 Truck History
- Poj 1789 Truck History
- poj 1789 Truck History(最小生成树模板题)
- POJ_1789 Truck History
- poj 1789 Truck History(Prim)(中等)
- poj-1789 Truck History
- poj 1789 Truck History 最小生成树
- poj-1789-Truck History
- POJ 1789 Truck History
- poj 1789 Truck History(图论:最小生成树)
- POJ 1789 Truck History
- poj 1789 Truck History【最小生成树prime】
- Truck History - POJ 1789 最小生成树
- poj 1789 Truck History
- POJ1789 Truck History 最小生成树 + 路径压缩
- poj1789 Truck History