- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Sheet3
Sheet2
Sheet1
四、贪心算法(最小生成树)
【Prim算法的思路】
【问题描述】
在1~n这n个结点之间,有m条带权的无向边,每条边表示两个点之间的距离。从某点s开始,
选择n-1条边连接这n个点,使这n-1条边上的权之和最小。{无论从哪点开始,最小的n-1条边之和相同}
【输入】
输入数据的第1行有3个数n、m和s,分别表示结点数、边数和开始结点号;
第2行开始至第m+1行每行有3个数i,j,v,表示结点i至结点j之间的边权值为v;
【输出】
输出数据的第1行至第n-1行共n-1行,表示所求得的连接n个点的n-1条边。
每行有2个数,分别表示边的起点和终点;
第n行只有一个数,表示n-1条边上的权之和。
样例输入1
样例输出1
5 8 1
1 4
1 2 11
4 3
1 3 10
3 5
2 3 4
3 2
1 4 2
2 4 10
3 4 4
5 3 3
4 5 12
说明:
样例输入2
样例输出2
第1行:输入5个点(n=5),8条边(m=8)时,
9 14 1
1 2
求从第1点(s=1)出发最小生成树的代价
1 2 4
2 3
第2行:从点1至点2直接距离11
2 8 11
3 9
1 8 8
3 6
8 9 7
6 7
8 7 1
7 8
7 9 6
3 4
3 9 2
4 5
2 3 8
6 7 2
3 6 4
3 4 7
4 5 9
5 6 10
4 6 14
【 prim程序1:O(n2)的算法,邻接矩阵存储边】
program prim;{求最小生成树及其代价}
const maxn=100;
var a:array[1..maxn,1..maxn] of integer;
used:array[1..maxn] of boolean;
v,s,i,j,k,n,m,m1,min:integer;
dis,farther:array[1..maxn]of integer;{dis[j]:从已有最小生成树内各点至树外某点j的最短距离;}
sum:longint;{sum:最小生成树的代价} {farther[j]:树外j点至树内的第farther[j]点距离最近,以其为父结点}
st,fi:array[1..maxn]of integer;
begin
read(n,m,s);{n点,m边,起点s}
for i:=1 to n do
for j:=1 to n do a[i,j]:=maxint;{i与j点间无直接路径时设为maxint;也有程序设为-1}
for m1:=1 to m do begin{输入m条边的情况}
read(i,j,v);a[i,j]:=v;a[j,i]:=v;end;{i点至j点的距离为v}
for i:=1 to n do used[i]:=false;{所有点未加入最小生成树中}
used[s]:=true;{初始s点已加入最小生成树中}
if a[s,i]maxint then begin{点i至源点s有边相连}
dis[i]:=a[s,i];farther[i]:=s;end{i至初始树的距离dis[i];点i的父结点为s}
else begin dis[i]:=maxint;farther[i]:=-1;end;{无边相连时}
dis[s]:=0;farther[s]:=-1;
sum:=0;{总代价}
for i:=1 to n-1 do begin{n个结点组成的树,共产生n-1条树枝}
min:=maxint;{以下4行求所有树外的点中,离树中点最近的点k}
for j:=1 to n do
if not used[j] and (dis[j]min) then begin{点j在树外,且比当前最小距离还小}
k:=j;min:=dis[j];end;{k中记录点号j;更新最小值min}
used[k]:=true;{k点加入最小生成树中}
sum:=sum+dis[k];{累计总代价sum}
st[i]:=farther[k];fi[i]:=k;{树中第i条边起点st[i],终点fi[i]}
for j:=1 to n do{更新未在树中的各点}
if not used[j] and (a[k,j]
您可能关注的文档
- 怎样理解艺术作品.ppt
- 在学科教学中如何渗透法制教育.doc
- 在VC中如何使用Static控件来显示图像.doc
- 预分支电缆固定夹厂家,电缆夹具价格.ppt
- 与机械能相关的图象问题.doc
- 鱼类免疫球蛋白分子生物学研究进展.pdf
- 鱼骨型水平分支井技术+--+刘永辉+.pdf
- 幼儿园学科专业核心知识点.doc
- 有关金融工具的总结(超详细).doc
- 用友R9收支分类普及版讲义.doc
- 2025年中国视音频矩阵切换分配器市场调查研究报告.docx
- 2023安徽合肥市长丰县公共资源交易有限责任公司招聘人员3人笔试参考题库附带答案详解.pdf
- 2025年中国移动投光灯具市场调查研究报告.docx
- 2025年中国铜/钼铜/铜电子封装材料市场调查研究报告.docx
- 2023届大庆炼化分公司高校毕业生春季招聘5人笔试参考题库附带答案详解.pdf
- 2023山东日照交通能源发展集团有限公司招聘专业技术人员6人笔试参考题库附带答案详解.pdf
- 2023年中国南水北调集团新能源投资有限公司夏季校园招聘1人笔试参考题库附带答案详解.pdf
- 2023年中国电信蚌埠分公司客户经理招聘笔试参考题库附带答案详解.pdf
- 2023年中国矿业大学资源与地球科学学院江苏省能源国际有限公司工程技术人员招聘笔试参考题库附带答案详解.pdf
- 2025年中国浮球式液位变送器市场调查研究报告.docx
文档评论(0)