OpenJudge/Poj 1251 丛林中的路/Jungle Roads
1.链接地址:
http://bailian.openjudge.cn/practice/1251/
http://poj.org/problem?id=1251
2.题目:
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
![]()
热
带岛屿Lagrishan的首领现在面临一个问题:几年前,一批外援资金被用于维护村落之间的道路,但日益繁茂的丛林无情的侵蚀着村民的道路,导致道路维
修开销巨大,长老会不得不放弃部分道路的维护。上图左侧图显示的是正在使用道路的简图以及每条路每个月的维修费用(单位为aacms)。现在长老会需要提
出一种方案,即需要保证村落之间都可以互相到达,又要将每个月的道路维修费用控制在最小。村子编号为从A到I。上图右侧显示的方案最小维修开销为216
aacms每月。- 输入
- 输入包含1~100个数据集,最后一行为0.每个数据集第一行为村落数目n, 1 < n <
27,依次用字母表的前n个字母标记。接下来有n-1行,每行的第一个数据便是按字母顺序排列的村子编号(不包括最后一个村庄)。每个村庄后面的数据k代
表该村庄通往编号在其之后的村庄的道路数目,如A 2 B 12 I
25,代表A村庄有2个编号在A之后的村庄和其相连。若k大于0,k后面会依次给出这k个村庄的编号以及各自到起始村庄的道路维修费用,如A 2 B
12 I 25,代表A和B之间道路维修费用为12,
A和I之间道路维修费用为25(维修费用为不超过100的正整数).路的总数目不超过75条,每个村庄到其他村庄不会有超过15条路(包括编号在其之前和
之后的)。- 输出
- 每个数据集有一个输出:针对解决方案每个月维修道路的小费用。
提示:蛮力算法虽能找出解决方案,但将会超出时间限制。- 样例输入
9
A 2 B 12 I 25
B 3 C 10 H 40 I 8
C 2 D 18 G 55
D 1 E 44
E 2 F 60 G 38
F 0
G 1 H 35
H 1 I 35
3
A 2 B 10 C 40
B 1 C 20
0- 样例输出
216
30
3.思路:
4.代码:
#include<stdio.h>
#include<iostream>
#define MAX 30
#define MAXLOW 9999999
using namespace std;
struct
{
int lowcost;
}closedge[MAX];
int G[MAX][MAX];
/*int minimum(int size)
{
//在g[][]已经init的前提下
int i,min;
for(i=0;i<size;i++)
{
if(closedge[i].lowcost>0)
{
min=i;
break;
}
}
for(i=i;i<size;i++)
{
if(closedge[i].lowcost>0&&closedge[i].lowcost<closedge[min].lowcost)
{
min=i;
}
}
return min;
}*/
int minimum(int size)
{
int i,min,min_num=MAXLOW;
for(i=;i<size;i++)
{
if(closedge[i].lowcost!= && closedge[i].lowcost<min_num)
{
min_num=closedge[i].lowcost;
min=i;
}
}
return min;
}
int MiniSpanTree_PRIM(int G[][MAX],int k,int size)
{ int count=;
int i,j;
//初始化辅助数组
for(j=;j<size;j++)
{
if(j!=k) closedge[j].lowcost=G[k][j];
}
closedge[k].lowcost=;//初始,U={start}
//测试辅助数组是否正确
/*for(j=0;j<size;j++)
{
cout<<closedge[j].lowcost<<" ";
}
cout<<endl;*/
for(i=;i<size;i++)
{
k=minimum(size);
count+=closedge[k].lowcost;
closedge[k].lowcost=;
for(j=;j<size;j++)
{
if(G[k][j]<closedge[j].lowcost)
{
closedge[j].lowcost=G[k][j];
}
}
/*for(j=0;j<size;j++)
{
cout<<closedge[j].lowcost<<" ";
}
cout<<endl;*/
}
return count;
}
void InitGraph(int G[][MAX])
{
int i,j;
for(i=;i<MAX;i++)
{
for(j=;j<MAX;j++)
{
G[i][j]=MAXLOW;
}
}
}
int findStart(int G[][MAX],int size)
{
int i,j;
for(i=;i<size;i++)
{
for(j=;j<size;j++)
{
if(G[i][j]!=MAXLOW) return i;
}
}
}
int main()
{
int size;
int m,n,num,cost;
int i,j;
char c1,c2;
//size为村庄数
while(scanf("%d",&size)!=EOF && size)
{
//m为第几个村庄
InitGraph(G);
/*for(m=0;m<size-1;m++)
{
//num为村庄的路的数量(不完全的)
cin>>i>>num;
for(n=0;n<num;n++)
{
cin>>j>>cost;
G[i-'A'][j-'A']=G[j-'A'][i-'A']=cost;
}
}*/
for(i=;i<size-;i++)
{
cin>>c1>>n;
for(j=;j<n;j++)
{
cin>>c2>>num;
G[c1-'A'][c2-'A']=G[c2-'A'][c1-'A']=num;
}
}
//make sure input
/*for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
cout<<G[i][j]<<" ";
}
cout<<endl;
}*/
cout<<MiniSpanTree_PRIM(G,findStart(G,size),size)<<endl;
//cout<<findStart(G,size)<<size<<endl;测试找边是否正确
} return ;
}
OpenJudge/Poj 1251 丛林中的路/Jungle Roads的更多相关文章
- #最小生成树# #kruskal# ----- OpenJudge丛林中的路
最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法 ...
- Openjudge 235 丛林中的路
好久没练最小生成树了 253:丛林中的路 总时间限制: 1000ms 内存限制: 65536kB 描述 热 带岛屿Lagrishan的首领现在面临一个问题:几年前,一批外援资金被用于维护村落之间的道路 ...
- poj 1251 Jungle Roads (最小生成树)
poj 1251 Jungle Roads (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...
- POJ 1251 Jungle Roads (prim)
D - Jungle Roads Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Su ...
- POJ 1251 Jungle Roads - C语言 - Kruskal算法
Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid ...
- POJ 1251 && HDU 1301 Jungle Roads (最小生成树)
Jungle Roads 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/A http://acm.hust.edu.cn/vju ...
- POJ 1251 Jungle Roads(最小生成树)
题意 有n个村子 输入n 然后n-1行先输入村子的序号和与该村子相连的村子数t 后面依次输入t组s和tt s为村子序号 tt为与当前村子的距离 求链接全部村子的最短路径 还是裸的最小生成树咯 ...
- poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题
poj 1251 && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...
- POJ - 1251
Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20024 Accepted: 9234 Des ...
随机推荐
- linux系统基础(二)
磁盘管理(一) Linux设备认识 /dev/cdrom /dev/sr0 /dev/mouse /dev/sda /dev/hda IDE硬盘(支持4块):hd(a-d) [非IDE硬盘]SCSI硬 ...
- UIWebView 获取html标题
使用uiwebview.delegate -(void)webViewDidFinishLoad:(UIWebView *)webView { m_labTitle.text=[m_webVie st ...
- 块设备驱动之NAND FLASH驱动程序
转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240909 一.框架总结 watermark/2/text/aHR0cDov ...
- Java路径操作具体解释
1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...
- Mac联网恢复系统重新安装Lion
Mac的Lion系统,虽然不像Windows那样需要经常重装,但也难免会有要重置的时候,比如更换硬盘.本文介绍如何利用Mac的联网恢复系统进行Lion系统的在线恢复.Mac的在线恢复系统只在近几年的机 ...
- android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)
写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载 zbarLib编译project project下载0积分 bug 在2.3的系统中Hol ...
- python 源码解析
http://blog.donews.com/lemur/archive/category/cpython%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/
- 认识CoreData-多线程
CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...
- Android_listview_scrollListener
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- 【转】Centos配置yum源
转载自:http://blog.chinaunix.net/uid-23683795-id-3477603.html 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的 ...