F - Truck History——最小生成树_Prim算法
2017-07-26 09:31
525 查看
Think:
1知识点:最小生成树_Prim算法
2思考:字符串组最优生成
3题意分析:为使得1/Σ(to,td)d(to,td)最大,分子部分为1的状态使得分母最小即可,即生成所有“卡车种类”的最短距离和最小
4相同类型题目博客分享:博客: B - 英语考试 FZU - 2254——最小生成树
vjudge题目链接
以下为Accepted代码
1知识点:最小生成树_Prim算法
2思考:字符串组最优生成
3题意分析:为使得1/Σ(to,td)d(to,td)最大,分子部分为1的状态使得分母最小即可,即生成所有“卡车种类”的最短距离和最小
4相同类型题目博客分享:博客: B - 英语考试 FZU - 2254——最小生成树
vjudge题目链接
以下为Accepted代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int inf = 0x3f3f3f3f; int e[2014][2014], vis[2014], dis[2014]; char st[2014][14]; void Prim(int n); int main(){ int n, i, j, k, cnt; while(scanf("%d", &n) && n){ getchar(); for(i = 1; i <= n; i++) scanf("%s", st[i]); for(i = 1; i <= n; i++){ e[i][i] = 0; for(j = i+1; j <= n; j++){ cnt = 0; for(k = 0; k < 7; k++){ if(st[i][k] != st[j][k]) cnt++; } e[i][j] = e[j][i] = cnt; } } Prim(n); } return 0; } void Prim(int n){ int i, miv, v, num, sum; memset(vis, 0, sizeof(vis)); for(i = 1; i <= n; i++) dis[i] = e[1][i]; vis[1] = 1, dis[1] = 0, num = 1, sum = 0; while(num < n){ miv = inf; for(i =1; i <= n; i++){ if(!vis[i] && dis[i] < miv){ miv = dis[i], v = i; } } vis[v] = 1, num++, sum += dis[v]; for(i = 1; i <= n; i++){ if(!vis[i] && e[v][i] < dis[i]) dis[i] = e[v][i]; } } printf("The highest possible quality is 1/%d.\n", sum); }
相关文章推荐
- POJ 1789 Truck History (Prim算法求最小生成树)
- POJ_1789(Truck History )(最小生成树(普里姆prim算法))
- POJ 1789 Truck History 图论 prim算法 最小生成树
- 【最小生成树之prim算法】POJ 1789---Truck History
- poj1789 Truck History(最小生成树Prim算法)
- POJ 1789 ——Truck History 最小生成树 prim算法
- POJ 1789 Truck History(最小生成树,prim算法)
- Truck History(最小生成树_prim算法)
- poj--1789 Truck History(最小生成树Prim算法)
- POJ-1789 Truck History(prim算法,最小生成树)
- poj1789 Truck History ——最小生成树入门题_Prim算法
- 最小生成树——prim算法
- 算法导论-最小生成树之kruskal算法和prim算法
- 最小生成树------Prim算法
- HDU 1879 继续畅通工程 prim算法 最小生成树
- POJ 1789 Truck History【最小生成树简单应用】
- 求最小生成树的Prim算法和Kruskal算法
- 最小生成树之prim算法
- 第十三周 最小生成树的Prim算法
- POJ-2031 Building a Space Station(最小生成树 prim算法)