计算最佳连通分支.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算最佳连通分支

?? 在一张顶点带权的无向图中,计算含顶点数最多的一个连通分支和顶点权和最大的连通分支。 【输入】 ??? n(顶点数,1≤n≤20) ??? 以下n行,其中第i行是顶点i的权 ??? e(边数,1≤e≤210) ??? 以下e行,每行为有边连接的一对顶点 【输出】 ??? 含顶点数最多的一个连通分支 ??? 顶点权和最大的一个连通分支   【输入样例】 6 2 10 20 8 5 7 5 1 5 1 6 2 3 4 6 5 6  【输出样例】 1-5-6-4- 2-3-? program liantong_example; const ? maxv=20; var ? link,longlink:array[1..maxv,1..maxv] of boolean; ? f:array[1..maxv] of boolean; ? w:array[1..maxv] of integer; ? v,e,k,i,j,s,best,besti,max,maxk:integer; procedure init; ? begin ?? assign(input,liantong.in); ?? reset(input); ?? assign(output,liantong.out); ?? rewrite(output); ?? fillchar(longlink,sizeof(longlink),0); ?? fillchar(link,sizeof(link),0); ?? readln(v); ?? for i:=1 to v do ???? readln(w[i]); ?? readln(e); ?? for k:=1 to e do ???? begin ?????? readln(i,j); ?????? link[i,j]:=true; ?????? link[j,i]:=true; ???? end; ? end;{init} procedure bibao; ? begin ??? longlink:=link; ??? for k:=1 to v do ????? for i:=1 to v do ?????? for j:=1 to v do ??????? longlink[i,j]:=longlink[i,j] or (longlink[i,k] and longlink[k,j]); ? end;{bibao} procedure dfs(i:integer);???????? {深度优先搜索,用于输出路径} ? begin ??? write(i,-); ??? f[i]:=true; ??? for j:=1 to v do ????? if (not f[j]) and longlink[i,j] ???????? then dfs(j); ? end;{dfs} begin{main} ? init; ? bibao; ? for i:=1 to v do ??? begin ????? k:=0;s:=0; ????? for j:=1 to v do????????? {计算顶点i所在连通分支中的顶点总数和顶点的权和} ??????? if longlink[i,j] ????????? then begin ???????????????? k:=k+1; ???????????????? s:=s+w[j]; ?????????????? end; ??????? if kbest??????????????? {求出顶点数的最大值} ??????????? then begin ?????????????????? best:=k; ?????????????????? besti:=i; ???????????????? end; ??????? if smax???????????????? {求出顶点权和的最大值} ??????????? then begin ?????????????????? max:=s; ?????????????????? maxk:=i; ???????????????? end; ??????? if k=v then break; ????? end; ?? fillchar(f,sizeof(f),false);? {结点是否访问数组初始化} ?? dfs(besti); ?? writeln; ?? fillchar(f,sizeof(f),false); ?? dfs(maxk); ? close(input); ? close(output); end.

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档