7-10 公路村村通(30 分)
来源:互联网 发布:java知识地图软件 编辑:程序博客网 时间:2024/05/01 13:59
7-10 公路村村通(30 分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式:
输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。
输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。
输入样例:
6 151 2 51 3 31 4 71 5 41 6 22 3 42 4 62 5 22 6 63 4 63 5 13 6 14 5 104 6 85 6 3
输出样例:
12
作者: 陈越
单位: 浙江大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB
#include<iostream>
#include<vector>using namespace std;
#define maxNv 1001
#define maxcost 100000
vector<int> cost(maxNv,maxcost);
vector<int> parent(maxNv);//用来储存最小生成树
int flag=1;
struct enode{
int v1,v2;
int weight;
};
using edge=enode*;
struct graph{
int Nv=0,Ne=0;
int G[maxNv][maxNv];
};
using Graph=graph*;
Graph CreateGraph(){
Graph gra=new graph();
cin>>gra->Nv>>gra->Ne;
for(int i=0;i<maxNv;i++)
for(int j=0;j<maxNv;j++)
gra->G[i][j]=maxcost;
return gra;
}
void Insert(Graph gra,edge e){
gra->G[e->v1][e->v2]=e->weight;
gra->G[e->v2][e->v1]=e->weight;
}
Graph BuildGraph(){
Graph gra=CreateGraph();
edge e=new enode();
for(int i=0;i<gra->Ne;i++){
cin>>e->v1>>e->v2>>e->weight;
Insert(gra,e);
}
return gra;
}
int findmin(Graph gra){
int min=maxcost;
int v=0;
for(int i=1;i<=gra->Nv;i++)
if(cost[i]!=0&&cost[i]<min) {min=cost[i];v=i;}
return v;
}
void solve(Graph gra){
int v1=1,v2=0;
int mincost=0;
cost[1]=0;
parent[1]=-1;
for(v2=1;v2<=gra->Nv;v2++)
if(cost[v2]!=0&&gra->G[v1][v2]!=maxcost&&gra->G[v1][v2]<cost[v2]){
cost[v2]=gra->G[v1][v2];
parent[v2]=v1;
}
while(1){
v1=findmin(gra);
if(v1==0) break;
mincost+=cost[v1];
cost[v1]=0;
for(v2=1;v2<=gra->Nv;v2++)
if(cost[v2]!=0&&gra->G[v1][v2]!=maxcost&&gra->G[v1][v2]<cost[v2]){
cost[v2]=gra->G[v1][v2];
parent[v2]=v1;
}
}
for(int i=1;i<=gra->Nv;i++)
if(cost[i]!=0) flag=0;//用来判断是否所有的点都被收进树中了
if(flag==0) cout<<-1;
else
cout<<mincost;
}
int main()
{
Graph gra=BuildGraph();
solve(gra);
/* for(int i=1;i<=gra->Nv;i++){
for(int j=1;j<=gra->Nv;j++)
cout<<gra->G[i][j]<<" ";
cout<<endl;
}
*/
return 0;
}
阅读全文
0 0
- 7-10 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- 5-10 公路村村通 (30分)
- 5-10 公路村村通 (30分)
- 公路村村通(30 分)
- 08-图7 公路村村通(30 分)
- 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 5-10 公路村村通 (30分) prim Kruskal 算法
- 5-9 公路村村通 (30分)
- PTA 7-11(图) 公路村村通(30 分) 最小生成树prim
- PTA 数据结构与算法题目集(中文)5-10 公路村村通 (30分)
- 公路村村通(30分) 最小生成树
- 机器学习笔记
- POJ 1456 supermarket(贪心加并查集)
- 协调多个对象之间的交互——中介者模式(一)
- 统计完全二叉树的节点数
- java字符串startsWith和endWith方法
- 7-10 公路村村通(30 分)
- 机器学习笔记
- C++实训6
- 链接
- gradle 用户手册 第3章 安装Gradle
- 19. Remove Nth Node From End of List
- DBUtils
- 文件管理之---遍历Documents下的所有文件以及文件夹
- [leetcode] 494. Target Sum