Truck History POJ 1789 ZOJ 2158 Prim算法
2013-03-31 21:21
375 查看
就是Prim算法,求最小生成树,把每个汽车编号看成点,两个编号的距离,也就是相同位置不同字符的数目,就看做边,显然,看成无向图,谁生成谁自己想想就行了 ,这里边比较多,用Prim算法。
代码:
View Code
这题很成功地过了。
代码:
View Code
#include <cstdio> #define MAXN 2005 int n; int lowcost[MAXN]; int edge[MAXN][MAXN]; int dis(char a[],char b[]) { int s = 0; for(int i=0; i<7; i++) if(a[i] != b[i] ) s++; return s; } void Prim() { int i,j; int sum=0; for(i=0; i<n; i++) lowcost[i] = edge[0][i]; lowcost[0] = -1; for(i=1; i<n; i++) { int min= 1000000; int v; for(j=0; j<n; j++) { if(lowcost[j] != -1 && lowcost[j] <min) { v = j; min = lowcost[j]; } } sum += lowcost[v]; lowcost[v] = -1; for(j=0; j<n; j++) { if(lowcost[j] != -1 && edge[v][j] < lowcost[j]) lowcost[j] = edge[v][j]; } } printf("The highest possible quality is 1/%d.\n",sum); } int main() { // freopen("out.cpp","r",stdin); while(~scanf("%d",&n) && n != 0) { int i,j; char a[MAXN][8]; for(i=0; i<n; i++) scanf("%s",a[i]); for(i=0; i<n; i++) { for(j =i; j<n; j++) { if(i == j ) edge[i][j] = 0; else { edge[i][j] = dis(a[i],a[j]); edge[j][i] = edge[i][j]; } } } Prim(); } return 0; }
这题很成功地过了。
相关文章推荐
- Truck History POJ - 1789 prim算法
- POJ1789-Truck History .
- Truck History Poj 1789(Prim)
- poj1789 Truck Historyq
- Truck History POJ - 1789 最小生成树Prim
- Truck History POJ - 1789
- POJ1789-Truck History .
- Truck History poj 1789 最小生成树
- POJ 1789 Truck History MST(水)
- zoj 2158 poj 1789 Truck History (Prim)
- poj 1789 Truck History
- ZOJ 2158 && POJ 1789 Truck History (经典MST)
- ZOJ 2158/POJ 1789 - Truck History
- Truck History poj1789 最小生成树
- poj 1789 Truck History MST
- poj-1789 Truck History *
- POJ 1789 Truck History Prim
- poj&nbsp;1789&nbsp;Truck&nbsp;History&nbsp;(prim)
- Truck History POJ 1789【Kruscal算法 || Prim】
- Truck History POJ - 1789