求最小生成树(Prim算法)

1000(ms)
10000(kb)
2251 / 4487
Tags: 生成树

求出给定无向带权图的最小生成树。图的定点为字符型,权值为不超过100

的整形。在提示中已经给出了部分代码,你只需要完善Prim算法即可。

#include< iostream> 
using namespace std;

typedef struct 
{ 
int n; 
int e; 
char data[500]; 
int edge[500][500]; 
}Graph;

typedef struct 
{ 
int index; 
int cost; 
}mincost;

typedef struct 
{ 
int x; 
int y; 
int weight;    
}EDGE;

typedef struct 
{ 
int index; 
int flag; 
}F;

void create(Graph &G,int n ,int e) 
{ 
int i,j,k,w; 
char a,b; 
for(i=0;i< n;i++) 
cin>>G.data[i]; 
for(i=0;i< n;i++) 
for(j=0;j< n;j++) 
{ 
if(i==j) 
G.edge[i][j]=0; 
else 
G.edge[i][j]=100; 
}

for(k=0;k< e;k++) 
{ 
cin>>a; 
cin>>b; 
cin>>w; 
for(i=0;i< n;i++) 
if(G.data[i]==a) break; 
for(j=0;j< n;j++) 
if(G.data[j]==b) break;

G.edge[i][j]=w; 
G.edge[j][i]=w; 
} 
G.n=n; 
G.e=e; 
}

void Prim(Graph &G,int k) 
{

//完成Prim算法

}

int main() 
{ 
Graph my; 
int n,e; 
cin>>n>>e; 
create(my,n,e); 
Prim(my,0);    
return 0; 
}

输入

第一行为图的顶点个数n第二行为图的边的条数e接着e行为依附于

一条边的两个顶点和边上的权值

输出

最小生成树中的边。

样例输入

6
10
ABCDEF
A B 6
A C 1
A D 5
B C 5
C D 5
B E 3
E C 6
C F 4
F D 2
E F 6

样例输出

 (A,C)(C,F)(F,D)(C,B)(B,E)
 #include<iostream>
#include<cstring>
using namespace std;
typedef struct
{
int n; //点的个数
int e; //边的条数
char data[]; //接收点的字符串
int edge[][]; //图的邻接矩阵
} Graph;
typedef struct
{
int index;
int cost;
} mincost;
void create(Graph &G,int n,int e) //建立图
{
int i,j,k,w;
char a,b;
for(i=; i< n; i++)
cin>>G.data[i];
for(i=; i< n; i++) //给图的邻接矩阵赋初值
for(j=; j< n; j++)
{
if(i==j)
G.edge[i][j]=;
else
G.edge[i][j]=;
}
for(k=; k< e; k++)
{
cin>>a;
cin>>b;
cin>>w;
for(i=; i< n; i++) //填充邻接矩阵
if(G.data[i]==a)
break;
for(j=; j< n; j++)
if(G.data[j]==b)
break;
G.edge[i][j]=w;
G.edge[j][i]=w;
}
G.n=n;
G.e=e;
}
void Prim(Graph &G,int v)
{
int lowcost[];
memset(lowcost,,sizeof(lowcost));
int MIN;
int closest[],i,j,k;
for(i=; i<G.n; i++) //根据初始点来记录该点能到的点连的边的权
{
lowcost[i]=G.edge[v][i];
closest[i]=v;
}
for(i=; i<G.n; i++)
{
MIN=;
for(j=; j<G.n; j++)
if(lowcost[j]!=&&lowcost[j]<MIN) //找最小的边
{
MIN=lowcost[j];
k=j;
}
cout<<"("<<G.data[closest[k]]<<","<<G.data[k]<<")";
lowcost[k]=;
for(j=; j<G.n; j++)
if(lowcost[j]&&G.edge[k][j]<lowcost[j]) //以k为初点来初始化
{
lowcost[j]=G.edge[k][j];
closest[j]=k;
}
}
}
int main()
{
Graph my;
int n,e;
cin>>n>>e;
create(my,n,e);
Prim(my,);
return ;
}

swust oj 1075的更多相关文章

  1. SWUST OJ 1075 求最小生成树(Prim算法)

    求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...

  2. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  3. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  4. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  5. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  6. [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)

    题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  7. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  8. [Swust OJ 1026]--Egg pain's hzf

      题目链接:http://acm.swust.edu.cn/problem/1026/     Time limit(ms): 3000 Memory limit(kb): 65535   hzf ...

  9. [Swust OJ 1139]--Coin-row problem

    题目链接:  http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...

随机推荐

  1. Eclipse中Project的属性Deployment Assembly(部署程序集)消失了,不存在了,去哪儿了

    1. 该项目不是web项目,所以不存在Deployment Assembly 属性.在Eclipse中,怎样将一个非web project变成一个web project? 1)右键项目,选择Proje ...

  2. tmunx error:invalid option: status-utf8 invalid option: utf8

    修改为:set-window-option -gq mouse off set-window-option -gq mode-mouse off set-option -gq status-utf8 ...

  3. M600 Pro 安装问题解决

    1.遥控器版本为1.2.10 提示版本已是最新版本,那么Lightbridge2 必须是1.1.60 不能是1.1.70 2.卸载机翼的时候,尽量用飞机带的那把工具 3.机翼安装 135 逆时针 cc ...

  4. Linux(CentOS)安装Node.JS和npm的两种方式(yum安装和源码安装)

    yum安装 yum安装是将yum源中的rpm包下载到本地,安装这个rpm包.这个rpm包是别人编译安装好的二进制包.这种方式方便快捷,特别是不用考虑包依赖. 0.了解linux版本 通过 uname ...

  5. 分析轮子(四)- 我也玩一把 Serializable.java

    前言:在写 分析轮子(一)-ArrayList.java 的时候曾经下过一个结论 “实现Serializable接口,表示ArrayList是可序列化的”,这个结论是以往学习的经验所得,并且平时在编程 ...

  6. JPA学习笔记(3)——JPA注解

    Entity Table Id GeneratedValue Basic Column Transient Temporal @Entity @Entity 标注用于实体类声明语句之前.指出该Java ...

  7. 你见过的最全面的python重点

    首先和大家说个对不起,由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西,对于Nginx的东西我没总结在这里,大家可以Python聚焦看,点击直达专栏哦. ...

  8. 【iCore4 双核心板_ARM】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA

    实验现象及操作说明: 1.将升级文件拷入U盘system文件夹中,通过U盘转接线将U盘连接到iCore4 USB OTG接口. 2.烧写程序成功,绿色ARM·LED灯点亮,三色FPGA·LED灯循环点 ...

  9. sql server中的用户临时表和全局临时表的区别

    临时表分为: 本地临时表,仅限于当前访问者访问,创建方法去如下:create table #TableName(表结构)储存于数据库tempdb内(硬盘),当前用户断开连接(把当前的),自动删除如果使 ...

  10. SpringMvc的Url映射和传参案例(转)

    Springmvc的基本使用,包括url映射.参数映射.页面跳转.ajax和文件上传 以前学习的时候写的代码案例,今天整理笔记的时候找到了,很久没有来园子了,发上来当个在线笔记用吧,免的时间长了又忘了 ...