网站大量收购独家精品文档,联系QQ:2885784924

第8讲:图的基本概念和算法.ppt

  1. 1、本文档共92页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
邻接矩阵:代码书写简单,找邻接点慢 邻接表:代码书写较复杂,找邻接点快 稀疏图:边表 type node=record w:integer; //边权 u,v:integer; //两个结点 end; var e: array[1..maxn*(maxn-1) div 2] of node; //边 求无向的连通分量 sum:=0; for i:=1 to n do if not f[i] then begin inc(sum); dfs(i); end; writeln(sum); //noip2001 const maxn=51; var a:array[0..9,0..9] of boolean; f:array[0..9] of integer; ans:array[0..500] of shortint; s:string; n,len:integer; 构图 procedure init; var k,i,p,q:integer; begin fillchar(a,sizeof(a),false); for i:=0 to 9 do a[i,i]:=true; readln(s); readln(k); for i:=1 to k do begin readln(p,q); a[p,q]:=true; end; end; 生产数组f procedure makef; var i,j,k:integer; begin for k:=0 to 9 do for i:=0 to 9 do for j:=0 to 9 do a[i,j]:=a[i,j]or(a[i,k] and a[k,j]); for i:=0 to 9 do for j:=0 to 9 do if a[i,j] then inc(f[i]); end; procedure mul(k:integer); //高精度乘单精度 var i,m:integer; begin len:=ans[0]; for i:=1 to len do ans[i]:=ans[i]*k; for i:=1 to len do begin ans[i+1]:=ans[i+1]+ans[i] div 10; ans[i]:=ans[i] mod 10; end; m:=ans[len+1]; while m0 do begin inc(len); ans[len]:=m mod 10; m:=m div 10; end; ans[0]:=len; end; main procedure main; var i,k:integer; begin makef; n:=length(s); fillchar(ans,sizeof(ans),0); ans[1]:=1; ans[0]:=1; for i:=1 to n do begin k:=f[ord(s[i])-48]; if k0 then mul(k); end; end; procedure print; var i:integer; begin for i:=ans[0] downto 1 do write(ans[i]); writeln; end; begin init; main; print; end. 分析: 求出任意两点间的最短距离。 枚举每一个顶点到其他n-1个点的最短距离和。 最小者即所求目标。 由邻接矩阵a先求出f[i,j] for i:=1 to n do for j:=1 to n do if a[i,j]maxint then

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档