poj 1789 Truck History(图论:最小生成树)
2014-07-21 16:15
323 查看
让我再水这一题
题目读不懂是硬伤...
题意是把每行字符串看做一个节点,两个字符串之间不同字符数看做距离
求最小生成树
要注意到这里是完全图,因此用prim比较好
代码如下:
题目读不懂是硬伤...
题意是把每行字符串看做一个节点,两个字符串之间不同字符数看做距离
求最小生成树
要注意到这里是完全图,因此用prim比较好
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define LL long long #define INF 0x7fffffff using namespace std; int n, dis[MAXN], g[MAXN][MAXN]; char str[MAXN][10]; int get_dis(int i, int j) { int k, cnt = 0; for(k=0; k<7; ++k) { if(str[i][k] != str[j][k]) cnt++; } return cnt; } LL prim() { int now, minedge, minnode, i, j; LL ans; for(i=0; i<n; ++i) dis[i] = INF; now = 0; ans = 0; for(i=0; i<n-1; ++i) { dis[now] = -1; minedge = INF; for(j=0; j<n; ++j) { if(now!=j && dis[j]>=0) { dis[j] = min(dis[j], g[now][j]); if(dis[j] < minedge) { minedge = dis[j]; minnode = j; } } } now = minnode; ans += minedge; } return ans; } int main(void) { int i, j; while(scanf("%d", &n) && n) { for(i=0; i<n; ++i) scanf("%s", str[i]); for(i=0; i<n; ++i) { for(j=i+1; j<n; ++j) { g[i][j] = g[j][i] = get_dis(i, j); } } printf("The highest possible quality is 1/%lld.\n", prim()); } return 0; }
相关文章推荐
- POJ 1789 Truck History 图论 prim算法 最小生成树
- poj——1789(图论之最小生成树的简单应用)
- POJ-1789 Truck History 裸最小生成树
- POJ 1789 Truck History (最小生成树 Prim)
- POJ1789--Truck History--最小生成树
- poj 1789 Truck History 最小生成树
- POJ1789 Truck History(Prim最小生成树)
- POJ1789,Truck History,最小生成树,Prim
- poj1789 Truck History(最小生成树)
- poj1789 Truck History ——最小生成树入门题_Prim算法
- POJ 1789 Truck History【最小生成树简单应用】
- POJ-1789 Truck History 最小生成树
- POJ 1789 Truck History【最小生成树简单应用】
- poj 1789 Truck History(最小生成树 prim)
- poj 1789 Truck History(最小生成树)
- POJ1789 Truck History(最小生成树)
- POJ1789 Truck History【最小生成树】【终于AC了】
- poj 1789 Truck History 最小生成树
- 初级->图算法->最小生成树 poj 1789 Truck History
- poj1789 Truck History (最小生成树)