`
人生难得糊涂
  • 浏览: 117361 次
社区版块
存档分类
最新评论

POJ1789PRIM算法

 
阅读更多

裸PRIM 没什么好说的

 

#include<iostream>
using namespace std;
#define MAXSIZE 2010
#define INF 100000
int map[MAXSIZE][MAXSIZE];
int dp[MAXSIZE][MAXSIZE];
int n;
int vis[MAXSIZE];
int dis[MAXSIZE];//记录已有的树到该点的最短距离
int prim()
{
	int i,j,ans=0;
	memset(vis,0,sizeof(vis));
	//把第一个顶点加入集合
	vis[1]=1;
	
	for(i=1;i<=n;i++)
	{
		dis[i]=map[1][i];
	}

	dis[1]=0;
	for(i=1;i<n;i++)//循环n-1次 每次得到一个顶点
	{
		//找一个与已生成的树相连 并且权值最小的顶点
		int min=INF;
		int index=-1;
		for(j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]!=0)//还没有加入集合并且 与现有的树有边相连
			{
					if(min>dis[j])
					{
						min=dis[j];
						index=j;
					}
			}
		}
		//将找到的点加入已有的树
		vis[index]=1;
		//将这条边的权值保存
		ans+=min;
		//更新dis 数组
		for(j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]!=0&&dis[j]>map[index][j])
				dis[j]=map[index][j];
		}
	}
	return ans ;
}
int main()
{
	char truck[MAXSIZE][7];
//	freopen("in.txt","r",stdin);
	while(true)
	{
		scanf("%d",&n);
		if(!n)
			break;
		memset(map,0,sizeof(map));
		for(int i=1;i<=n;i++)
		{
			scanf("%s",truck[i]);
			for(int j=1;j<i;j++)
			{
				int tnum=0;
				for(int k=0;k<7;k++)//比较两个字符串之间有几个不同的字母
				{
					if(truck[i][k]!=truck[j][k])
						tnum++;
				}
				map[i][j]=map[j][i]=tnum;
			}
		}
		printf("The highest possible quality is 1/%d.\n",prim());
	}
	
	return 0;
}

 

分享到:
评论

相关推荐

    POJ1789-Truck History【Prim】

    综上所述,POJ1789题目是通过Prim算法解决与卡车历史相关的最优化问题,解题者提供了AC代码和解题报告,帮助读者理解算法的应用和问题的解决步骤。学习这个案例可以加深对Prim算法的理解,以及如何将其应用于实际...

    POJ 1789 最小生成树之prim算法

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

    POJ2485-Highways【Prim】

    标签"POJ 2485 Highways Prim"进一步强调了这是POJ平台上的第2485题,主题与公路网络有关,且要求使用Prim算法。 从压缩包子文件的文件名称来看,有两个文件: 1. "POJ2485-Highways【Prim】.cpp":这是一个C++源...

    POJ 1751 求最小生成树prim算法(JAVA)

    标题 "POJ 1751 求最小生成树Prim算法(JAVA)" 提到的是一个编程挑战,涉及图论中的经典算法——Prim算法。在计算机科学中,Prim算法是用于寻找加权无向图的最小生成树的一种有效方法。最小生成树是一棵树形结构,...

    poj1789.zip_history

    综合以上信息,我们可以推测poj1789的问题可能要求参赛者设计一个程序,使用Prim算法来处理卡车运输路线的优化问题。程序可能需要读取一系列历史运输数据,构建一个代表卡车行驶路线的图,并找出连接所有运输点的...

    POJ中级图算法所有题目【解题报告+AC代码】

    Prim算法从一个顶点开始逐步添加边,而Kruskal算法则是按边的权重从小到大加入,确保不形成环路。 3. **拓扑排序**:对于有向无环图(DAG),拓扑排序可以得到一个顶点的线性顺序,使得对于每条有向边 `(u, v)`,`u...

    POJ算法题目分类

    * 最小生成树算法:最小生成树算法是指计算图的最小生成树的算法,如 prim、kruskal。 * 拓扑排序:拓扑排序是指计算图的拓扑排序的算法,如 poj1094。 * 二分图的最大匹配:二分图的最大匹配是指计算二分图的最大...

    POJ1258-Agri-Net【Prim】

    解题的关键在于正确实现Prim算法,并确保其运行效率足够高,以满足POJ系统的时限要求。通常可以采用优先队列(如二叉堆)来优化查找最小边的过程,以降低时间复杂度。 **AC代码分析:** 解题报告中的"POJ1258-Agri-...

    POJ3026-Borg Maze【BFS+Prim】

    《POJ3026-Borg Maze:BFS与Prim算法的应用解析》 在计算机科学领域,图论是解决问题的重要工具之一,而BFS(广度优先搜索)和Prim算法则是其中的两种经典算法。本篇文章将围绕北大POJ3026题目“Borg Maze”来探讨...

    POJ2031-Building a Space Station【Prim+计算几何】

    该题目结合了图论中的Prim算法与计算几何领域的知识,挑战参赛者的算法设计与实现能力。 【描述】题目要求构建一个空间站,具体来说是找到最小生成树,以连接一系列在外太空漂浮的模块。这里运用了Prim算法,这是一...

    北大POJ初级-基本算法

    5. **贪心算法**:对于一些局部最优的选择可以导致全局最优解的问题,如霍夫曼编码、Prim算法和Kruskal算法等。 6. **图论算法**:包括图的遍历(深度优先搜索和广度优先搜索)、最短路径问题(Dijkstra算法、Floyd...

    北大POJ初级-图算法

    5. **Prim算法和Kruskal算法**:这两种都是解决最小生成树问题的算法,适用于无权图或带权重的图。Prim算法从一个节点开始,每次添加一条最小的边,直到连接所有节点;而Kruskal算法则是按边的权重从小到大排序,...

    ACM-POJ 算法训练指南

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

    poj 2485 Highways 测试数据

    1. **Prim算法**:Prim算法是一种贪心策略,从一个初始顶点开始,逐步添加最便宜的边,使得每次添加的新边都连接到已有的最小生成树。这个过程持续到所有顶点都被包含在内。Prim算法在稠密图中效率较高,因为它每次...

    北大POJ中级-基本算法

    【北大POJ中级-基本算法】解题报告与AC代码详解 北京大学的在线编程平台POJ(Problem Set of Peking University)是许多编程爱好者和学习者提升算法技能的重要平台。中级算法题目通常涵盖了一些基础但重要的算法...

    poj训练计划.doc

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

    poj题目分类

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

    经典 的POJ 分类

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

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

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

    POJ第1861题源码POJ第1861题源码POJ第1861题源码POJ第1861题源码

    1. **Prim算法**:从一个顶点开始,逐步添加边,每次添加的边连接两个不同的连通分量,并且具有当前未加入树的边中的最小权重,直到连接所有顶点为止。 2. **Kruskal算法**:首先对所有边按照权重从小到大排序,...

Global site tag (gtag.js) - Google Analytics