电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

基本算法正式稿VIP免费

基本算法正式稿_第1页
1/23
基本算法正式稿_第2页
2/23
基本算法正式稿_第3页
3/23
《基本算法正式稿》一、数论算法1.求两数的最大公约数functiongcd(a,b:integer):integer;beginifb=0thengcd:=aelsegcd:=gcd(b,amodb);end;2.求两数的最小公倍数functionlcm(a,b:integer):integer;beginifa0doinc(lcm,a);end;3.素数的求法A.小范围内判断一个数是否为质数:functionprime(n:integer):Boolean;varI:integer;beginforI:=2totrunc(sqrt(n))doifnmodI=0thenbeginprime:=false;exit;end;prime:=true;end;B.判断longint范围内的数是否为素数(包含求50000以内的素数表):proceduregetprime;vari,j:longint;p:array[1..50000]ofboolean;beginfillchar(p,sizeof(p),true);p[1]:=false;i:=2;whilei<50000dobeginifp[i]thenbeginj:=i*2;whilej<50000dobeginp[j]:=false;inc(j,i);end;end;inc(i);end;l:=0;fori:=1to50000doifp[i]thenbegininc(l);pr[l]:=i;end;end;{getprime}functionprime(x:longint):integer;vari:integer;beginprime:=false;fori:=1toldoifpr[i]>=xthenbreakelseifxmodpr[i]=0thenexit;prime:=true;end;{prime}二、图论算法1.最小生成树A.Prim算法:procedureprim(v0:integer);varlowcost,closest:array[1..maxn]ofinteger;i,j,k,min:integer;beginfori:=1tondobeginlowcost[i]:=cost[v0,i];closest[i]:=v0;end;fori:=1ton-1dobegin{寻找离生成树最近的未加入顶点k}min:=maxlongint;forj:=1tondoif(lowcost[j]0)thenbeginmin:=lowcost[j];k:=j;end;lowcost[k]:=0;{将顶点k加入生成树}{生成树中增加一条新的边k到closest[k]}{修正各点的lowcost和closest值}forj:=1tondoifcost[k,j]0dobegini:=find(e[q].v1);j:=find(e[q].v2);ifi<>jthenbegininc(tot,e[q].len);vset[i]:=vset[i]+vset[j];vset[j]:=[];dec(p);end;inc(q);end;writeln(tot);end;2.最短路径A.标号法求解单源点最短路径:vara:array[1..maxn,1..maxn]ofinteger;b:array[1..maxn]ofinteger;{b[i]指顶点i到源点的最短路径}mark:array[1..maxn]ofboolean;procedurebhf;varbest,best_j:integer;beginfillchar(mark,sizeof(mark),false);mark[1]:=true;b[1]:=0;{1为源点}repeatbest:=0;fori:=1tondoIfmark[i]then{对每一个已计算出最短路径的点}forj:=1tondoif(notmark[j])and(a[i,j]>0)thenif(best=0)or(b[i]+a[i,j]0thenbeginb[best_j]:=best;mark[best_j]:=true;end;untilbest=0;end;{bhf}B.Floyed算法求解所有顶点对之间的最短路径:procedurefloyed;beginforI:=1tondoforj:=1tondoifa[I,j]>0thenp[I,j]:=Ielsep[I,j]:=0;{p[I,j]表示I到j的最短路径上j的前驱结点}fork:=1tondo{枚举中间结点}fori:=1tondoforj:=1tondoifa[i,k]+a[j,k]0thenpre[i]:=v0elsepre[i]:=0;end;mark[v0]:=true;repeat{每循环一次加入一个离1集合最近的结点并调整其他结点的参数}min:=maxint;u:=0;{u记录离1集合最近的结点}fori:=1ton...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

基本算法正式稿

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部