`

poj 1789

 
阅读更多

题意:历史上,曾用7个小写字母来表示每种truck的型号,每两种型号之间的差距为字母串中不同字母的个数。现在给出n种不同型号的truck,问怎样使

1/Σ(to,td)d(to,td)的值最小。(即找到一条连接所有truck的最短路径。典型的最小生成树的问题, discuss里说,Prim算法适合稠密图,Kruskal算法适合稀疏图,可以使用prim和kruskal两种方法。该题是稠密的图。求最小生成树的最段路径问题:

不说了 直接看代码:
#include <iostream>
using namespace std;
const int Max=2005;
const int inf=0xfffff;

int n,ans;
int map[Max][Max],dis[Max];

int min(int a,int b)
{
	return a<b?a:b;
}

void prim()
{
    int i, j, now, min_node, min_edge;
    for(i = 1; i <= n; i ++)
        dis[i] = inf;
    now = 1;
    ans = 0;
    for(i = 1; i < n; i ++)
	{
        dis[now] = -1;
        min_edge = inf;
        for(j = 1; j <= n; j ++)
            if(j != now && dis[j] >= 0)
			{
                dis[j] = min(dis[j], map[now][j]);
                if(dis[j] < min_edge)
				{
                    min_edge = dis[j];
                    min_node = j;
                }
            }
			now = min_node;
			ans += min_edge;
    }
}

int main()
{
	int i,j,k;
	char truck[Max][8];
	while (cin>>n&&n!=0)
	{
		for (i=1;i<=n;i++)
		{
			scanf("%s",&truck[i]);
			for (j=i-1;j>=1;j--)
			{
				int edge=0;
				for(k=0;k<7;k++)
					if(truck[i][k]!=truck[j][k])
						edge++;
					map[i][j]=map[j][i]=edge;

			}
		}
		prim();
		printf("The highest possible quality is 1/%d.\n", ans);
	}
	return 0;
}
 具体的prim模板参见前几题,关于最小生成树问题,未完待续……
分享到:
评论

相关推荐

    POJ1789-Truck History【Prim】

    【标题】"POJ1789-Truck History【Prim】"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目要求参赛者利用Prim算法来解决一个具体的问题。 【描述】"北大POJ1789-Truck ...

    poj1789.zip_history

    【标题】"poj1789.zip_history" 指的是一个与编程竞赛问题相关的压缩文件,其中包含了对POJ(Programming Online Judge)问题1789的历史记录或者解决方案。POJ是一个在线编程竞赛平台,它提供了各种算法题目供程序员...

    poj 1789 Truck History.md

    poj 1789 Truck History.md

    POJ 1789 最小生成树之prim算法

    标题中的“POJ 1789 最小生成树之prim算法”指的是一个在线编程竞赛题目,来源于普林斯顿开放在线课程(POJ)平台。该题目要求参赛者实现Prim算法,这是一种解决图论问题中寻找最小生成树的经典算法。最小生成树是在...

    poj题目分类

    * 最小生成树算法:例如 Prim、Kruskal,例如 poj1789、poj2485、poj1258、poj3026。 * 拓扑排序:例如 poj1094。 * 二分图的最大匹配:例如 poj3041、poj3020。 * 最大流的增广路算法:例如 poj1459、poj3436。...

    poj训练计划.doc

    - 最小生成树算法:如Prim算法和Kruskal算法,用于找出图中的最小生成树,如`poj1789, poj2485`。 - 拓扑排序:适用于有向无环图,用于确定任务的执行顺序,如`poj1094`。 - 二分图的最大匹配:如匈牙利算法,...

    ACM-POJ 算法训练指南

    2. **最小生成树**:Prim算法和Kruskal算法,用于构建图的最小生成树(poj1789, poj2485, poj1258, poj3026)。 3. **网络流**:Max-flow算法,用于解决最大流问题(poj1094)。 4. **拓扑排序**:解决有向无环图的...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj1789, poj2485, poj1258, poj3026 - **解释**:最小生成树算法主要包括Prim算法和Kruskal算法。 ##### (4) 拓扑排序 - **例题**:poj1094 - **解释**:拓扑排序是对有向无环图的一种排序方式,可以...

    POJ题目简单分类(ACM)

    - **最小生成树算法**:prim和kruskal算法,如poj1789,用于找到图的最小成本连接。 - **拓扑排序**:对有向无环图的排序,如poj1094。 - **二分图最大匹配**:匈牙利算法,如poj3041和poj3020,解决分配问题。 ...

    acm训练计划(poj的题)

    - (poj1789, poj2485, poj1258, poj3026):介绍普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal),用于寻找加权无向图的最小生成树。 4. **拓扑排序**: - (poj1094):适用于有向无环图(DAG)的一种排序方式,...

    acm poj300题分层训练

    如poj3278、poj2049、poj3083是图遍历的例子,poj1860、poj3259等则是最短路径问题,poj1789、poj2485等则涉及最小生成树。 3. **数据结构**:包括串、排序、简单并查集、哈希表、二分查找、哈夫曼树和堆。poj1035、...

    经典 的POJ 分类

    - POJ 1789、POJ 2485:Prim算法的具体应用。 - POJ 1258、POJ 3026:Kruskal算法的实际案例。 #### 字符串处理 - **题目示例**: - POJ 3349、POJ 3274:字符串匹配及Hash应用。 - POJ 2151、POJ 1840:利用...

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ ... - 推荐题目:[poj1789](https://vjudge.net/problem/POJ-1789)、[poj2485](https://vjudge.net/problem/POJ-2485)、[poj1258](https://vjudge.net/problem/POJ-1258)、[poj3026]...

    POJ 分类题目

    - poj1789 - poj2485 - poj1258 - poj3026 - **应用场景**:适用于构建最小成本网络、电力线路铺设等问题。 **4. 拓扑排序** - **定义**:对于有向无环图(DAG),拓扑排序是按某种顺序对顶点进行排序,使得...

    强大的POJ分类——各类编程简单题及其算法分类

    3. **最小生成树算法**:Prim和Kruskal方法,用于找到图中权重最小的连接所有节点的子树,如POJ1789、2485、1258和3026。 4. **拓扑排序**:对有向无环图(DAG)的节点进行线性排序,如POJ1094。 5. **二分图的最大...

    POJ题目分类

    - **示例题目**: poj1789, poj2485, poj1258, poj3026 - **知识点**: - **Prim算法**:适用于稠密图,从任意一个顶点开始构建最小生成树。 - **Kruskal算法**:适用于稀疏图,按照边的权值从小到大依次加入到树中...

    ACMer需要掌握的算法讲解 (2).docx

    * 最小生成树算法:prim、kruskal、POJ1789、POJ2485、POJ1258、POJ3026 * 拓扑排序:POJ1094 * 串算法:POJ1035、POJ3080、POJ1936 * 哈希表和二分查找等高效查找法:POJ3349、POJ3274、POJ2151、POJ1840、POJ2002...

    ACM常用算法及其相应的练习题.docx

    + poj1789, poj2485, poj1258, poj3026 * 拓扑排序:poj1094 * 二分图的最大匹配:匈牙利算法 + poj3041, poj3020 * 最大流的增广路算法:KM算法 + poj1459, poj3436 三、数据结构 * 串:poj1035, poj3080, poj...

    ACM 详解算法目录

    例如,POJ1860和POJ3259是最短路径算法的典型例题,而POJ1789和POJ2485则是最小生成树算法的经典例题。 数据结构部分涵盖了串、排序、简单并查集、哈希表和二分查找、哈夫曼树、堆和trie树八个方面。例如,POJ1035...

Global site tag (gtag.js) - Google Analytics