swust oj 1075
求最小生成树(Prim算法)
求出给定无向带权图的最小生成树。图的定点为字符型,权值为不超过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的更多相关文章
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- [Swust OJ 1023]--Escape(带点其他状态的BFS)
解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535 Descript ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)
题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...
- [Swust OJ 1026]--Egg pain's hzf
题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf ...
- [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 ...
随机推荐
- mac下host配置 + mac修改了环境变量却不生效:zsh: command not found: xxx
https://blog.csdn.net/hlllmr1314/article/details/52228672 在/etc/profile中配置了go语言环境变量: export GOROOT=/ ...
- VS2008 编译出错 fatal error C1859: unexpected precompiled header error, simply rerunning the compiler might fix this problem
https://jingyan.baidu.com/article/d8072ac49ebd23ec95cefddd.html
- 解决Android Studio出现Failed to open zip file. Gradle's dependency cache may be corrupt的问题
问题如下图所示: 解决: 修改 gradle-wrapper.properties里的gradle的版本,与之前没有报错的gradle版本一致.就可以了 比如我报这个错的时候 : distributi ...
- angular 2 - 003 typescript
http://www.typescriptlang.org/docs/index.html var book: string = "hellp angular 2"; var nu ...
- Python调试打印错误信息
try: ..... except Exception, e: print 'repr(e):\t', repr(e)
- 机器人中的轨迹规划(Trajectory Planning )
Figure. Several possible path shapes for a single joint 五次多项式曲线(quintic polynomial) $$\theta(t)=a_0+ ...
- shell脚本启动语法错误syntax error near unexpected token '{
执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型 ...
- C# websocket与html js实现文件发送与接收处理
C# websocket与html js实现文件发送与接收处理 using System; using System.Collections.Generic; using System.Linq; u ...
- Tokyo Tyrant(TTServer)系列(一)-介绍和安装
Tokyo Cabinet 是日本人Mikio Hirabayashi 开发的一款DBM 数据库,该数据库读写很快.哈希模式写入100 万条数据仅仅需0.643 秒.读取100 万条数据仅仅需0.77 ...
- windows下查看特定端口被什么程序占用
我电脑上因为命令: netstat -ano 列出的太多了,所以不好看. 以下是其他方式: 查看8088端口占用情况: 开始---->运行---->cmd,或者是window+R组合键,调 ...