POJ 1251 Jungle Roads (zoj 1406) MST

原创 2013年12月05日 23:00:36

传送门:

http://poj.org/problem?id=1251

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=406

POJ RE死了,改成cin救过了。。不过ZOJ原来的就能过,估计是POJ的数据多了个空格什么的。

1.prim

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

const int MAXN=27;
const int INF=99999;
int dis[MAXN];
int map[MAXN][MAXN];
int n;
void prim()
{
	bool vis[MAXN]={0};

	for(int i=0;i<n;i++)
			dis[i]=INF;

	int cur=0;
	vis[cur]=1;
	dis[cur]=0;

	for(int i=0;i<n;i++)
	{
		int mini=INF;
		for(int j=0;j<n;j++)
			if(!vis[j] && map[cur][j] !=INF && dis[j] > map[cur][j])//先选出地图上权值小的
				dis[j]=map[cur][j];

		for(int j=0;j<n;j++)
			if(!vis[j] && mini> dis[j])
				mini=dis[cur=j];
		vis[cur]=1;
	}

}

int main()
{
	while(scanf("%d",&n),n)
	{
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				map[i][j]=INF;


		for(int i=0;i < n-1;i++)
		{
			char temp;
			int from,len,to,cost;
			cin>>temp>>len;
			from=temp-'A';
			while(len--)
			{
				cin>>temp>>cost;
				to=temp-'A';
				map[from][to]=map[to][from]=cost;
			}	

		}
		prim();
		int sum=0;
		for(int i=0;i<n;i++)
			sum+=dis[i];
		printf("%d\n",sum);
	}

	return 0;
}

下面是ZOJ AC 但是 POJ RE的就是输入格式不同。

#include<cstdio>
#include<cstring>
const int MAXN=27;
const int INF=99999;
int dis[MAXN];
int map[MAXN][MAXN];
int n;
void prim()
{
	bool vis[MAXN]={0};

	for(int i=0;i<n;i++)
			dis[i]=INF;

	int cur=0;
	vis[cur]=1;
	dis[cur]=0;

	for(int i=0;i<n;i++)
	{
		int mini=INF;
		for(int j=0;j<n;j++)
			if(!vis[j] && map[cur][j] !=INF && dis[j] > map[cur][j])//先选出地图上权值小的
				dis[j]=map[cur][j];

		for(int j=0;j<n;j++)
			if(!vis[j] && mini> dis[j])
				mini=dis[cur=j];
		vis[cur]=1;
	}

}

int main()
{
	while(scanf("%d",&n),n)
	{
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				map[i][j]=INF;


		for(int i=0;i < n-1;i++)
		{
			getchar();
			char temp;
			int from,len,to,cost;
			scanf("%c %d",&temp,&len);
			from=temp-'A';
			for(int j=0;j<len;j++)
			{
				scanf(" %c %d",&temp,&cost);
				to=temp-'A';
				map[to][from]=map[from][to]=cost;
			}	
			
		}
		prim();
		int sum=0;
		for(int i=0;i<n;i++)
			sum+=dis[i];
		printf("%d\n",sum);
	}

	return 0;
}


方法2   kruskal

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=28;
const int INF=99999;
int dis[MAXN];
int n,city_cnt,sum;
int fa[MAXN];

struct city
{
	int x,y;
	int cost;
}a[MAXN*MAXN];

bool operator <(const city &x,const city &y)
{
	return x.cost<y.cost;
}

int find(int cur)
{
	return fa[cur]==cur? cur: fa[cur]=find(fa[cur]);
}

int main()
{
	while(scanf("%d",&n),n)
	{

		sum=city_cnt=0;
		for(int i=0;i < n-1;i++)
		{
			char temp;
			int from,num,to,cost;
			cin>>temp>>num;
			from=temp-'A';
			while(num--)
			{
				cin>>temp>>cost;
				to=temp-'A';
				a[city_cnt].x=from;
				a[city_cnt].y=to;
				a[city_cnt++].cost=cost;
			}	

		}

		sort(a,a+city_cnt);
		for(int i=0;i<n;i++)	
			fa[i]=i;

		for(int i=0;i<city_cnt;i++)
		{
			int root_x=find(a[i].x);
			int root_y=find(a[i].y);
			if(root_x!=root_y)
			{
				sum+=a[i].cost;
				fa[root_x]=root_y;
			}
		}
		printf("%d\n",sum);
	}

	return 0;
}


ZOJ 1406 POJ 1251 Jungle Roads 丛林中的道路,最小生成树,Kruskal算法

纯求最小生成树,注意输入的处理。

ZOJ1406 POJ1251 Jungle Roads,Prim算法~

这题是很简单的Prim算法应用,不解释。。。 /***********************************************************************...
  • neofung
  • neofung
  • 2011年08月20日 18:21
  • 1081

zoj 1406 poj 1251 Jungle Roads

#include #include #include #include using namespace std; const int MAXN = 27; const int MAXM =...

zoj 1406 Jungle Roads(简单-MST)

同水过,手写kruskal。 #include #include #include #define INF 1000000 #define MAXM 80 #define MAXN 30 #defi...
  • cqlf__
  • cqlf__
  • 2012年01月27日 17:14
  • 541

ZOJ 1406 Jungle Roads (最小生成树)

一道很直观的最小生成树题目,我用Prim来做的 最小生成树有两种算法   Prim 算法 和 Kruskal 算法 其中个人感觉Prim比较简洁些,也很好理解,而 Kruskal算法...

zoj 1406 Jungle Roads

一看就是最小生成树的题目 我这里用的是Prim方法。每次取与树的连通边值最小的一条。 WA了3、4次,自觉没有地方敲错的。 再重新看一遍,才发现判断连通边值最小的条件写错了。 为图方便,把判断...

ZOJ 1406.Jungle Roads

给出所有村庄的所有通路,找出一条连接所有村庄花费最小的通路。 最小生成树的应用。此处用的是Prim算法。 #include #include using namespace std; struct...
  • that163
  • that163
  • 2012年10月20日 22:08
  • 640

prim zoj 1406 Jungle Roads

/* http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1406 题意:有n个地点,有n-1行描述n个地点之间的连接,第一个...

zoj 1406 Jungle Roads(最小生成树))

Jungle Roads Time Limit: 2 Seconds      Memory Limit: 65536 KB The Head Elder of the tropical i...

POJ1251 Jungle Roads

Jungle Roads POJ - 1251 The Head Elder of the tropical island of Lagrishan has a problem. A bu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1251 Jungle Roads (zoj 1406) MST
举报原因:
原因补充:

(最多只允许输入30个字)