1 / 25
文档名称:

c算法大全常用c语言算法,包括数论算法,图论算法、排序算法、高精度计算、树的遍历算法等等.doc

格式:doc   大小:53KB   页数:25页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c算法大全常用c语言算法,包括数论算法,图论算法、排序算法、高精度计算、树的遍历算法等等.doc

上传人:szh187166 2019/2/11 文件大小:53 KB

下载得到文件列表

c算法大全常用c语言算法,包括数论算法,图论算法、排序算法、高精度计算、树的遍历算法等等.doc

文档介绍

文档介绍: gcd(a,b:integer):integer;begin ifb=0thengcd:=a  elsegcd:=gcd(b,amodb);end; lcm(a,b:integer):integer;begin ifa<bthenswap(a,b); lcm:=a; whilelcmmodb>0doinc(lcm,a);end;:functionprime(n:integer):Boolean; varI:integer; begin  forI:=2totrunc(sqrt(n))do   ifnmodI=0thenbegin prime:=false;exit;end;  prime:=true; end;(包含求50000以内的素数表): proceduregetprime;  var   i,j:longint;   p:array[1..50000]ofboolean;   begin    fillchar(p,sizeof(p),true);p[1]:=false;i:=2;whilei<50000dobegin ifp[i]thenbegin  j:=i*2;  whilej<50000dobegin   p[j]:=false;   inc(j,i);  end;  end;  inc(i); end; l:=0; fori:=1to50000do  ifp[i]thenbegin   inc(l);pr[l]:=i; end;end;{getprime}   functionprime(x:longint):integer;   vari:integer;   begin    prime:=false;fori:=1toldo ifpr[i]>=xthenbreak  elseifxmodpr[i]=0thenexit;prime:=true;   end;{prime}二、:  procedureprim(v0:integer);   var    lowcost,closest:array[1..maxn]ofinteger;i,j,k,min:integer;   begin    fori:=1tondobegin lowcost[i]:=cost[v0,i]; closest[i]:=v0; end;fori:=1ton-1dobegin {寻找离生成树最近的未加入顶点k} min:=maxlongint; forj:=1tondo  if(lowcost[j]<min)and(lowcost[j]<>0)thenbegin   min:=lowcost[j];   k:=j;  end; lowcost[k]:=0;{将顶点k加入生成树}   {生成树中增加一条新的边k到closest[k]} {修正各点的lowcost和closest值} forj:=1tondo  if cost[k,j]<lwocost[j]thenbegin   lowcost[j]:=cost[k,j];   closest[j]:=k;  end; end;end;{prim}:(贪心)按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。functionfind(v:integer):integer;{返回顶点v所在的集合}vari:integer;begin i:=1; while(i<=n)and(notvinvset[i])doinc(i); ifi<=nthenfind:=ielsefind:=0;end;procedurekruskal;var tot,i,j:integer;begin fori:=1tondovset[i]:=[i];{初始化定义n个集合,第I个集合包含一个元素I}p:=n-1;q:=1;tot:=0;{p为尚待加入的边数,q为边集指针}sort;{对所有边按权值递增排序,存于e[I]中,e[I].v1与e[I].v2为边I所连接的两个顶点的序号,e[I].len为第I条边的长度} whilep>0dobegin  i:=find(e[q].v1);j:=find(e[q].v2);  ifi<>jthenbegin   inc(tot,e[q].len);   vset[i]:=vset[i]+vset[j];vset[j]:=[];   dec(p);  end;  inc(q); end; writeln(tot);end;